我在 Cnetos 6.2.0 版本 64 位机器上运行一个简单的程序。
int main()
{
int b = 1078085270;//1078085218;
float a;
a = (float)(b);
printf("val of a is %f\n",a);
return 0;
}
a 的输出是 1078085248。我将值更改为 1078085218。仍然得到相同的结果。我无法理解输出为何或如何损坏或更改?
谁能解释一下?
我在 Cnetos 6.2.0 版本 64 位机器上运行一个简单的程序。
int main()
{
int b = 1078085270;//1078085218;
float a;
a = (float)(b);
printf("val of a is %f\n",a);
return 0;
}
a 的输出是 1078085248。我将值更改为 1078085218。仍然得到相同的结果。我无法理解输出为何或如何损坏或更改?
谁能解释一下?
看1078085270
二进制数:
b1000000010000100100011010010110
一个 IEEE-754 单精度浮点数只有 24 位精度,但这个数字有超过 24 个有效位,所以当你将此数字转换为 时float
,它必须四舍五入。中可表示的两个最接近的数字float
是:
b100000001000010010001101 0000000
b100000001000010010001110 0000000
(空格表示第 24 位和第 25 位数字之间的间隔,即数字四舍五入的点)。因为你的数字更接近第一个数字,所以它被四舍五入到那个值,它是1078085248
十进制的。