我需要添加多少才能获得 1 字节浮点数的无穷大

What is the minimum number I need to add to get Infinity for 1 byte floating point

我试图了解由于溢出需要添加多少才能得到 Infinity。我已经阅读 this answer。所以让我在这里澄清一下我的理解。为简化起见,我将使用 1 字节浮点数,其中 4 位用于指数,3 位用于尾数:

0 0000 000

我可以在其中存储的最大正数是:

0 1110 111

换算成科学计数法是:

   1.111 x 2^{7} = 11110000

我的理解是否正确,我应该添加以获得 Infinity 的最小数字是 00010000:

       11110000
+      00010000
        --------
     1 00000000

据我了解,任何小于 00010000 的值都不会导致溢出,结果将四舍五入为 11110000。但是 00010000 是浮点格式的 0 0000 001,它是数字 1。那么仅添加 1 是否足以导致溢出?

答案在the other answer to the question you link to中给出。舍入到无穷大的最小值是:

c = 27 × ( 2 − ½ × 21-4 ) = 1.9375 × 27 = 1.11112 × 27

所以您可以添加以获得无穷大的最小值是

cfmax = 1.11112 × 27 − 1.1112 × 27 = 0.00012 × 27 = 23

如果我理解正确的话,在您建议的格式中会有位模式 0 1010 000

更新:为什么是这个特定的截止日期?

假设在这个上面还有另一个二进制数,那么下一个浮点数就是

x = 1.0002 × 28

注意 c 正好是 xf[ 中间的值=42=]最大。换句话说,四舍五入为 x 的值被四舍五入为无穷大,而四舍五入为 f[=42 的值=]max 仍然四舍五入到相同的值。