为什么小于 1 的最大 IEEE 浮点可表示数与 1 相差半个机器 epsilon?



我们可以将 1.0 表示为 2^0 x 1.0,将小于 1.0 的最大可表示数表示为 k,其中 k = 2^0 x 0.111.......1 截断以适合。

然后差值或 ulp 为 1.0 - k = 2^0 x 0.00000.....1。

这和我们有的机器ε不一样吗 N epsilon

= 2^0 x 1.000000....1 - 2^0 x 1.000 = 2^0 x 0.000.....1?为什么正确的值是一半?

另外,如何计算 1.0 以外的值的 ulp?

有限浮点数表示为符号(+或 −(,一个固定的数字n+ 1 的数字 d 0、d−1、d−2、d−n,在某个基数b和一个指数e,使得表示的数字符号为 d0.d−1 d−2...dn×be.对于这个答案,我们将符号作为 +,将 b作为 2。

有了这个表示:

  • 1 是 +1.00...0 × 20.
  • 下一个大于 1 的数字是 +1.00...1 × 20.由于 dn位增加了 1,因此它超过 1 增加了 20−n
  • 下一个小于 1 的数字是 +1.11...1 × 2−1。请注意,指数减小了。这意味着它的 d−n 位实际上具有 2−1−n的值。因此,它与 1 仅相差 2−1n 而不是 20−n

对于任何正常的浮点数,ULP 为ben。但是,在浮点格式的下限附近,IEEE 754 具有次正规数,并且 ULP 被钳制为beminn的值。

最新更新