2

我在 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。仍然得到相同的结果。我无法理解输出为何或如何损坏或更改?

谁能解释一下?

4

1 回答 1

4

1078085270二进制数:

b1000000010000100100011010010110

一个 IEEE-754 单精度浮点数只有 24 位精度,但这个数字有超过 24 个有效位,所以当你将此数字转换为 时float,它必须四舍五入。中可表示的两个最接近的数字float是:

b100000001000010010001101 0000000
b100000001000010010001110 0000000

(空格表示第 24 位和第 25 位数字之间的间隔,即数字四舍五入的点)。因为你的数字更接近第一个数字,所以它被四舍五入到那个值,它是1078085248十进制的。

于 2013-08-21T18:06:12.003 回答