将int转换为float - 这是如何工作的?

时间:2015-12-12 18:48:24

标签: floating-point

我拿了一个常规整数并将其转换为浮点数,我发现很奇怪的是这取决于我正在转换的值,转换后LSB可以稍微翻转一下。

以下是一个例子:

Enter a number: 1313131360
FLOAT:          01001110100111001000100110010111
                        ^
                This is where the mantissa starts
INT(Original):          1001110010001001100101101100000
INT(BackFromFloat):     1001110010001001100101110000000

我取了数字1313131360并将其转换为浮点数,然后返回到int,你可以看到最后一行中第8位变为1。

更多我注意到,如果我输入数字1313131328,它不会改变这一位:

Enter a number: 1313131328
FLOAT:          01001110100111001000100110010110
                        ^
                This is where the mantissa starts
INT(Original):          1001110010001001100101101000000
INT(BackFromFloat):     1001110010001001100101100000000

为什么?

1 个答案:

答案 0 :(得分:0)

在这两种情况下,转换都在进行舍入到最接近的舍入,并且关系是均匀的。在每种情况下,必须删除最后7位。问题是第8位的哪个值使浮点数尽可能接近原始输入。

01100000接近10000000而不是00000000。

01000000正好在00000000和10000000之间的中间位置。这将调用tie tie规则,该规则选择使最不重要的尾数位为零的规则。