估计级联浮点运算的最大相对误差

时间:2017-05-28 13:03:37

标签: math floating-point

根据this very elaborate answer,我估算下列计算的最大相对误差δ res,max

// Pseudo code    
float a, b, c; // Prefilled IEEE 754 floats with double precision    
res = a / b * c;

res = a *(1 +δ a )/(b *(1 +δ b ))*(1 +δ a / b < / sub>)* c *(1 +δ c )*(1 +δ a / b * c

= a / b * c *(1 +δ a )/(1 +δ b )*(1 +δ a / b )*(1 +δ c )*(1 +δ a / b * c

= a / b * c *(1 +δ res

=&GT; δ res =(1 +δ a )/(1 +δ b )*(1 +δ a / b )*(1 +δ c )*(1 +δ a / b * c ) - 1

所有δ均在±ε/ 2的范围内,其中ε为2 ^ -52。

=&GT; δ res,max =(1 +ε/ 2)^ 4 /(1 - ε/ 2) - 1≈2.5*ε

这是一种有效的错误估算方法,可用于基本浮点运算的每个组合吗?

PS:

是的,我读过“每个计算机科学家应该知道的关于浮点算术的内容”。 ;)

1 个答案:

答案 0 :(得分:1)

嗯,可能是一种有效的方法。我不确定你是如何驾驭最后一行的,但你的结论基本上是正确的(尽管注意到,因为理论误差可能超过2.5e,实际上误差界限是3e)。

是的,这是一种有效的方法,适用于此表单的任何浮点表达式。但是,结果并不总是那么干净。一旦你在混合中加法/减法,而不仅仅是乘法和除法,你通常不能将确切的表达式与错误乘数完全分开。相反,你会看到输入术语和错误术语直接相乘,而不是在这里相对恒定的界限。

作为一个有用的示例,请尝试导出(a+b)-a的最大相对误差(假设ab是准确的)。