我们可以将 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...d−n×be.对于这个答案,我们将符号作为 +,将 b作为 2。
有了这个表示:
- 1 是 +1.00...0 × 20.
- 下一个大于 1 的数字是 +1.00...1 × 20.由于 d−n位增加了 1,因此它超过 1 增加了 20−n。
- 下一个小于 1 的数字是 +1.11...1 × 2−1。请注意,指数减小了。这意味着它的 d−n 位实际上具有 2−1−n的值。因此,它与 1 仅相差 2−1−n 而不是 20−n。
对于任何正常的浮点数,ULP 为be−n。但是,在浮点格式的下限附近,IEEE 754 具有次正规数,并且 ULP 被钳制为bemin−n的值。