-1

所以我理解C++中浮点数双精度数的区别。

double 只是一个双浮点数,而 float 是一个单浮点数(精度大小的两倍)。

我的问题是,为什么浮点数表示为“300000011920928955078125e-24”(对于值 3.0),但双精度数会简单地显示为 3.0?

为什么不双重显示所有尾随数字?它具有更高的精度,但仍然具有与浮点相同的有限精度,所以我不确定为什么它不会像那样显示。

4

1 回答 1

2

这是因为许多值不能用浮点数精确表示(单精度或双精度),但 double 可以表示更接近的值。如果您打印显示更多小数位,您几乎肯定会看到错误。

值 0.3 无法精确表示。此外,计算结果可能会从操作数中提取错误。“0.3 * 10”会放大结果中的误差,所以不会是精确的 3.0。

最好的模拟是尝试以十进制显示“1/3”。你可以写成 0.333333 或 0.333333333333。如果将它们乘以 3,您将得到 0.999999 或 0.999999999999。在计算器屏幕上显示那些(具有固定位数),第一个将显示错误,而第二个将被四舍五入。

编辑:代码来证明这一点:

#include <stdio.h>

int main()
{
    float f = 0.3;
    double d = 0.3;
    printf("%.50lf %.50lf\n", f, d);
    printf("%.10lf %.10lf\n", f, d);
}

显示:

0.30000001192092895507812500000000000000000000000000 0.29999999999999998889776975374843459576368300000000
0.3000000119 0.3000000000
于 2012-09-27T23:20:55.250 回答