为什么数字(不能)以双精度 IEEE754 表示?

Why number are (not) representable in double precision IEEE754?

我对IEEE754双精度感到困惑,我考虑两个问题:
1. 为什么每个数都来自区间-254, -254+2, -254+4 ...254 是可表示的吗?

2. 为什么 254+2 不可表示?

你能帮帮我吗?我了解 IEEE754 的工作方式 - 但是,我对 seeing 有疑问。

IEEE 754 双精度数的有效数(或尾数)有 53 位。 −254可以精确表示为

mantissa: 1.00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00 (bin)
exponent: 54
sign:     1

现在让我们暂时忘记符号位。与这个解释无关。所以假设我们有 +254.

有了这个指数,有效数的最低 -- 最右边 -- 位 的值为 2- 52 * 254 = 4。所以 254 + 4 编码为:

mantissa: 1.00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 01 (bin)
exponent: 54                                                             ^
                                                                lowest bit

但是中间没有任何值。所以你不能编码 254 + 2.

为什么这对 −254 + 2 不是问题?因为这与 −(254 − 2) 相同,表示为:

mantissa: 1.11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11
exponent: 53 !!
sign:     1

而指数 53 意味着您有 2-52 * 253 = 2 的步长。下一个趋向 0 的值是:

mantissa: 1.11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 10
exponent: 53
sign:     1

即 −254 + 4,或者实际上是 −(254 − 4)。你可以这样继续下去,直到达到 −253