所以我理解C ++中浮动与双打的区别。
双精简是一个双浮点,而一个浮点数 浮点(精度的两倍)。
我的问题是,如何将浮点数表示为'300000011920928955078125e-24'(值为3.0),但是双精度数将仅显示为3.0?
为什么双重显示所有尾随数字?它具有更高的精度,但仍然存在与浮点相同的有限精度,所以我不确定为什么它也不会出现这样的情况。
答案 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