C ++ float与double的精确数字

时间:2012-09-27 23:15:50

标签: c++ math floating-point floating-point-precision

所以我理解C ++中浮动双打的区别。

  

双精简是一个双浮点,而一个浮点数   浮点(精度的两倍)。

我的问题是,如何将浮点数表示为'300000011920928955078125e-24'(值为3.0),但是双精度数将仅显示为3.0?

为什么双重显示所有尾随数字?它具有更高的精度,但仍然存在与浮点相同的有限精度,所以我不确定为什么它也不会出现这样的情况。

1 个答案:

答案 0 :(得分: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