为什么有偏指数的值为 127 而不是 128?

loc*_*obe 3 floating-point exponent

我知道这个问题对你来说太常见(或无聊)。但是,我不明白为什么选择 127 而不是 128 作为偏差指数。

作为 IEEE-754 标准,浮点数的指数部分有 8 位。据我所知,对于 8 位整数,我们将有一个范围:

  • [-128,127] 对于有符号整数
  • 或 [0,255] 对于无符号整数

好的,现在,为了移位(或偏置),通常我们必须将有符号整数加上 128 以将它们转换为无符号整数。例如,

  • -128 + 128 = 0
  • -127 + 128 = 1

但是,IEEE-754 标准选择 127 作为偏差,而 -128 + 127 = - 1 < 0。这符合逻辑吗?

我显然不明白背后的原因。因此,我需要你们的帮助,并感谢大家。

chu*_*ica 6

为什么选择 127 而不是 128 作为偏差指数。

binary32的偏差选择与有符号整数无符号整数的转换无关。

该选择基于所需的浮点编码范围。

max           3.402...e+38
min normal    1.175...e-38
min subnormal 1.401...e-45
Run Code Online (Sandbox Code Playgroud)

偏差的选择有些随意。为了实现平衡范围,偏差为 127,1.0/max 不为零(某些次正常指数接近最小正常),并且 1.0/min_normal <= max。这些都是不错的属性。所有 1.0/正常值都在 binary32 非零有限范围内。

如果偏差为 128,这些值将减半,并且我们将失去 1.0/min_normal <= max 属性。