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

old*_*959 -5 floating-point numerical-methods

我们可以将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.

与机器epsilon不同,我们有N epsilon = 2 ^ 0 x 1.000000 .... 1 - 2 ^ 0 x 1.000 = 2 ^ 0 x 0.000 ..... 1?

为什么正确的值是一半?

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

Eri*_*hil 8

有限浮点数表示为符号(+或 - ),固定数n + 1的数字d 0,d -1,d -2,d - n,在某些基数b和指数e中,这样表示的数字是符号 d 0 .d -1 d -2 ... d - n × b e.对于这个答案,我们将符号设为+,b为2.

有了这种表示:

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

对于任何正常的浮点数,ULP是b e - n.然而,浮点格式的下限附近,IEEE 754具有低于正常数字和ULP被钳位到值b 额敏 - ñ.