我试图将一个大整数转换为32位单精度浮点数,但我无法解决我遇到的这个问题。如果大整数的二进制表示大于23位尾数怎么办?
例如,取整数1,671,277,287
其二进制表示为01100011100111011010101011100111
我的理解是你向左移动小数位,直到它左边只有1位,如下所示:
01.100011100111011010101011100111
我的问题是这个尾数是30位,单个精度浮点只有23位尾数的空间。我试过寻找这个具体的问题,但我还没找到任何东西。我该如何解决这个问题?
编辑:发现一些信息以防其他人遇到此问题。单精度浮点数的默认舍入值是'#34;舍入到最近,与偶数"相关。另一篇StackOverflow帖子评论了如何轻松完成这项工作。答案 0 :(得分:1)
此问题相当于如何将1000_1110_0111_0110_1010_1011_1001_11舍入为23位。我将采用通常的默认舍入模式,即使是打破平局,它将舍入到最接近舍入的方式。
最重要的23位是1000_1110_0111_0110_1010_101。最重要的丢弃位是1,并且存在较低的有效非零位。
一般规则是:
这些规则中的第三条适用于此,因此您应该向上舍入到1000_1110_0111_0110_1010_110