我需要添加多少才能获得 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
所以您可以添加以获得无穷大的最小值是
c − fmax = 1.11112 × 27 − 1.1112 × 27 = 0.00012 × 27 = 23
如果我理解正确的话,在您建议的格式中会有位模式 0 1010 000
。
更新:为什么是这个特定的截止日期?
假设在这个上面还有另一个二进制数,那么下一个浮点数就是
x = 1.0002 × 28
注意 c 正好是 x 和 f[ 中间的值=42=]最大。换句话说,四舍五入为 x 的值被四舍五入为无穷大,而四舍五入为 f[=42 的值=]max 仍然四舍五入到相同的值。
我试图了解由于溢出需要添加多少才能得到 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
所以您可以添加以获得无穷大的最小值是
c − fmax = 1.11112 × 27 − 1.1112 × 27 = 0.00012 × 27 = 23
如果我理解正确的话,在您建议的格式中会有位模式 0 1010 000
。
更新:为什么是这个特定的截止日期?
假设在这个上面还有另一个二进制数,那么下一个浮点数就是
x = 1.0002 × 28
注意 c 正好是 x 和 f[ 中间的值=42=]最大。换句话说,四舍五入为 x 的值被四舍五入为无穷大,而四舍五入为 f[=42 的值=]max 仍然四舍五入到相同的值。