计算的准确性

Accuracy of the computation

提问人:Elizabeth Welz 提问时间:2/7/2021 最后编辑:Cris LuengoElizabeth Welz 更新时间:2/7/2021 访问量:95

问:

如果 x 和 y 都可以(确切地)存储在系统中的浮点中,计算精度是多少。

x - (x/y) * y
MATLAB 精度 浮点精度

评论

1赞 Luis Mendo 2/7/2021
eps(x) 可能会让您了解计算误差

答:

5赞 aka.nice 2/7/2021 #1

在下溢的情况下,误差可能很大,例如,如果比率完全消失并四舍五入为零。xx/y

例如,以 .x=2^-100, y=2^1000

否则,如果 x/y 没有非规范化(不会下溢),我的猜测是,只要 Matlab 引擎遵守IEEE754标准,您大部分时间都会得到一个完美的零,最多 - 即不时地为 1 ulp(x)。eps(x)

原因是这个:让我们注意舍入误差 e

float(x/y) = x/y + e

通过四舍五入到最接近,并列到偶IEEE754模式,我们有

abs(e) < ulp(x/y)/2

对于除法,这是一种严格的不等式,否则除法必须是准确的。如果它是准确的,我们确信商符合可用的有效数(除非除法下溢)。

当我们乘以 y 时,我们得到这个确切的结果:

x + e*y

我们需要将这个确切的结果四舍五入 x
即 。
这可能会发生,例如尝试:
e*y >= ulp(x)/2y*ulp(x/y)/2 > e*y >= ulp(x)/2

x=2^52+2^51+1 , y=2^52+1 , x - (x/y)*y , y*eps(x/y)/2 > eps(x)/2

但不能,所以结果不能是 2 ulp off。 这很难证明,所以我的回答仍然只能作为猜测。
y*ulp(x/y)/2 > e*y >= 3*ulp(x)/2

最后的减法运算将是精确的 - 参见 https://en.wikipedia.org/wiki/Sterbenz_lemma

评论

2赞 chux - Reinstate Monica 2/7/2021
很好地回答了逐渐和完全的下溢问题。然而,也可能溢出,导致其他问题。x/y