类型转换使用gcc库浮动

时间:2013-08-21 17:50:13

标签: c gcc floating-point

我在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.仍然得到相同的结果。我无法理解输出被破坏或更改的原因或方式?

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

查看二进制数字1078085270

b1000000010000100100011010010110

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

b100000001000010010001101 0000000
b100000001000010010001110 0000000

(空格表示第24位和第25位之间的中断,数字为圆形的点)。因为您的数字更接近第一个数字,所以它会四舍五入到该值,即十进制的1078085248