【发布时间】:2019-09-22 04:15:34
【问题描述】:
我正在尝试使用以下代码打印浮点值299792450:
#include <stdio.h>
int main()
{
printf("%f\n", 299792450.0f);
return 0;
}
根据IEEE 754 Calculator,这是二进制32格式的完全可表示的浮点值。但是我在输出中得到了另一个值:
$ ./a.out
299792448.000000
为什么不等于299792450?我希望它是299792450,因为它是完全可表示的并且不应该有精度损失。
【问题讨论】:
-
链接的浮点计算器如何显示数字是可表示的?
-
我必须承认我误用了链接浮点计算器。
299792450确实不能完全表示,这就是输出不同的原因。 -
作为 IEEE-754 浮点数,该数字的值是 299792448。作为 32 位整数,它有超过 24 个有效位(十六进制:11DE7842,即 28 个有效位——我们可以不用前导和尾随零),所以它不能完全表示。
标签: c floating-point printf