1

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

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

其二进制表示为 01100011100111011010101011100111

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

01.100011100111011010101011100111

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

编辑:找出一些信息,以防其他人有这个问题。单精度浮点的默认舍入是“四舍五入到最接近,与偶数相关”。另一个 StackOverflow 评论了如何轻松地做到这一点。

StackOverflow 关于四舍五入的帖子

4

1 回答 1

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

于 2015-09-03T11:21:31.820 回答