大整数到单点浮点数

时间:2015-09-02 21:36:36

标签: floating-point integer mantissa single-precision

我试图将一个大整数转换为32位单精度浮点数,但我无法解决我遇到的这个问题。如果大整数的二进制表示大于23位尾数怎么办?

例如,取整数1,671,277,287

其二进制表示为01100011100111011010101011100111

我的理解是你向左移动小数位,直到它左边只有1位,如下所示:

01.100011100111011010101011100111

我的问题是这个尾数是30位,单个精度浮点只有23位尾数的空间。我试过寻找这个具体的问题,但我还没找到任何东西。我该如何解决这个问题?

编辑:发现一些信息以防其他人遇到此问题。单精度浮点数的默认舍入值是'#34;舍入到最近,与偶数"相关。另一篇StackOverflow帖子评论了如何轻松完成这项工作。

StackOverflow post regarding rounding

1 个答案:

答案 0 :(得分:1)

此问题相当于如何将1000_1110_0111_0110_1010_1011_1001_11舍入为23位。我将采用通常的默认舍入模式,即使是打破平局,它将舍入到最接近舍入的方式。

最重要的23位是1000_1110_0111_0110_1010_101。最重要的丢弃位是1,并且存在较低的有效非零位。

一般规则是:

  • 如果第一个丢弃位是0倒圆。
  • 如果第一个丢弃位为1且较低有效位全部为零,则舍入为偶数。
  • 如果第一个丢弃位为1且存在较低有效位的非零位,则向上舍入。

这些规则中的第三条适用于此,因此您应该向上舍入到1000_1110_0111_0110_1010_110