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

Floating point 为什么小于1的最大IEEE浮点表示数与1相差半个机器ε?,floating-point,numerical-methods,Floating Point,Numerical Methods,我们可以将1.0表示为2^0 x 1.0,将小于1.0的最大可表示数表示为k,其中k=2^0 x 0.111…….1截断以适合 然后1.0-k的差值或ulp=2^0 x 0.00000…..1 这不是和机器ε一样吗,我们有 N ε=2^0 x 1.000000….1-2^0 x 1.000=2^0 x 0.000….1 为什么正确的值是一半 此外,如何计算1.0以外的值的ulp?有限浮点数表示为符号(+或−), 数字d0,d的固定数字n+1−1,d−2,d−n、 在一些基数b中,一个指数e,表示

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

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

这不是和机器ε一样吗,我们有 N ε=2^0 x 1.000000….1-2^0 x 1.000=2^0 x 0.000….1

为什么正确的值是一半


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

有限浮点数表示为符号(+或−), 数字d0,d的固定数字n+1−1,d−2,d−n、 在一些基数b中,一个指数e,表示的数字是符号d0.d−1d−2…d−对于这个答案,我们取符号为+和b为2

在此陈述中:

  • 1是+1.00…0×20
  • 下一个大于1的数字是+1.00…1×20。因为−n位数增加1,超过1位数20−n
  • 下一个小于1的数字是+1.11…1×2−1.注意,指数减小。这意味着其d−n位的实际值为2−1.−n、 因此,它与1的区别仅为2−1.−n而不是20−n

对于任何普通浮点数,ULP都是−n、 然而,在浮点格式的下界附近,IEEE 754的数字低于正常值,ULP被限制为bemin值−n、

你的标题与你的实际问题不一致,并且问为什么一个谎言是真的。@OldselfLearner 1959:你的标题说小于1的最大可表示值是半个ε。不是。它是一减去半个ε。谢谢你给出了非常清楚的答案-我花了一些时间才得到它,但最终它是清楚的。还有,你认为呢你的意思是ULP值被钳制到b^{1-n}?还是b^{-1-n}?@Oldsellearner1959:实际上,对于次正常值,指数被钳制到称为emin的最小值,而不是1。我已经更正了我的答案。对于次正常值,指数不能再减小。相反,第一位数字减小到零。