为什么指数 IEEE754(单)限制在 2^{-126}<= e <=2^{127} 之间?

Why does the exponent IEEE754 (single) limit between 2^{-126}<= e <=2^{127}?

我指的是这个问题,但我对答案不满意:IEEE-754 32 Bit (single precision) exponent -126 instead of -127

答案是否暗示实际上指数可以是 but because of the representation in denormalized form the smallest possitive number is equal to

这是否意味着最小的可表示正数是:

or

最后两个选项是哪个?

非常感谢您。

再次感谢大家,大家解释的很好!

这很简单:为非正规化选择了 -126,因此最小的正规化和最大的非正规化之间没有阶梯。

最低正常值是

1.0000...bin × 2-126

下面一个"ULP"是

0.1111...bin × 2-126

如果是2-127,这两个值之间会有几个"ULP"(甚至很多"ULP")的步长。

在 IEEE-754 基本 32 位二进制浮点数中,每个有限值都具有以下形式:

± x.xxxxxxxxxxxxxxxxxxxxxxx • 2e

其中x.xxxxxxxxxxxxxxxxxxxxxxx是一个二进制数,−126≤e≤+127.

对于正规数,第一个x为1,e可以是−126≤e≤+127中的任意值。由于第一个 x 始终为 1,因此未明确存储它——浮点格式包含一位用于符号,23 位用于其他 x,8 位用于指数。指数存储为 e+127 的二进制。因此,对于从 −126 到 +127 的 e,存储的值为 1 到 254。剩下 0 和 255。

指数字段中的 0 是次正规数的代码。对于次正规数,指数 e 与最低正规指数 −126 相同,但第一个 x 为 0。因此次正规值的形式为:

± 0.xxxxxxxxxxxxxxxxxxxxxxx • 2−126

因此可以表示的最小正值是:

+ 0.00000000000000000000001 • 2−126

也就是2−149.

(指数字段中的255用于表示无穷大和NaN。)

Why does the exponent IEEE754 (single) limit between 2^{-126}<= e <=2^{127}?
Reworded:
Why does the exponent IEEE754 (single) limit between -126 <= exponent <= 127?

binary32 有一个 8 位 偏置指数 字段允许 256 个值。可以选择 wider/smaller 指数字段,但此处为 8。 2 个值,0 和 255,具有特殊含义,剩下 254。

在 1970 年代,得出的结论是对称分布这些 偏置指数 值 +/- 大约为零,通过使用 127 偏移量导致 254 个值 -126 到 +127。

正常 值的形式为:符号 * (1.xxx... 总共 23 x's...xxx) * 2 指数 - offset 提供 24 位二进制精度。

出于各种数值计算原因(经过多次辩论),得出的结论是 |values|小于最小的正常正数 1.0 * 21 - 127 应该会逐渐失去精度。这些是 次正常 denormal 数字。它们使用 偏置指数 0 和 与最小的 正常 [=35] 相同的合成指数 -126 进行编码=] 数.

         v--------------------------------------- Implied valued              
         | v--------------------------v---------- Significant explicitly encoded
         | |                          |     v---- Biased exponent
         | |                          |     | v-v Implied offset  
2^-126 = 1.000 0000 0000 0000 0000 0000 * 2^1-127 // smallest normal
         0.111 1111 1111 1111 1111 1111 * 2^0-126 // largest sub-normal
2^-127 = 0.100 0000 0000 0000 0000 0000 * 2^0-126
2^-128 = 0.010 0000 0000 0000 0000 0000 * 2^0-126
2^-129 = 0.001 0000 0000 0000 0000 0000 * 2^0-126
...
2^-149 = 0.000 0000 0000 0000 0000 0001 * 2^0-126 // smallest sub-normal
0.0f   = 0.000 0000 0000 0000 0000 0000 * 2^0-126 // zero

所以低至 2-127 的值具有 24 位精度,低至 2-149 的值具有不断降低的精度。