在给定的程序中,为什么每个 printf
得到不同的结果?
#include <stdio.h>
int main()
{
float c = 4.4e10;
printf("%f\n", c);
printf("%f\n", 4.4e10);
return 0;
}
它显示以下输出:
44000002048.000000
44000000000.000000
最佳答案
float
是一个包含 32 位 float 的类型,而常量 4.4e10
表示一个 double
,它包含一个 64 位 float (即一个 double 精度 float )
当您将 4.4e10
分配给 c
时,值 4.4e10
无法精确表示(称为尾数的参数中的舍入误差),并存储最接近的可能值 (44000002048)。当传给printf
时,就是promoted返回 double
,包括舍入误差。
第二种情况,值一直是一个double
,没有变窄变宽,恰好是一个double
可以表示值正是。
如果这是不受欢迎的行为,您可以将 c
声明为 double
以获得更高的精度(但请注意,您最终仍会达到精度限制)。
关于c - 为什么 %f 在传递浮点常量而不是变量时打印大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58187573/