ks1*_*322 2 c floating-point printf
我正在尝试299792450使用以下代码打印浮点值:
#include <stdio.h>
int main()
{
printf("%f\n", 299792450.0f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据IEEE 754计算器,这是二进制32格式的可精确表示的浮点值。但是我在输出中得到另一个值:
$ ./a.out
299792448.000000
Run Code Online (Sandbox Code Playgroud)
为什么不等于299792450?我希望它是299792450因为它完全可以表示,并且不应该失去精度。
假设a float是IEEE754单精度浮点数,则不能精确表示299792450 。
该值要求至少28位精度,但是a float最多具有24位精度。因此,该值将四舍五入为可以表示的最接近的可能值。
如果您使用double的精度为53位,则会看到确切的值。
printf("%f\n", 299792450.0);
Run Code Online (Sandbox Code Playgroud)