让我们用(我懒于尝试获得除法运算符的带圆圈版本),分别是精确乘法(),加法()和减法()的浮点类似物。我们假设(IEEE-754)对于它们全部
其中是由于四舍五入而导致相对误差上限的机器epsilon。我们还将使用以下容易证明的引理(假设所有,并且不太大):
× + - [ X ⊕ Ý ] = (X + Ý )(1 + δ ⊕),⊗,⊕,⊖×+−ε 中号一个Ç ħ | δ 我| ≤ ε 米一个Ç ħ米米Π我= 1(1 + δ 我)= 1 + θ (米),
[x⊕y]=(x+y)(1+δ⊕),|δ⊕|≤ϵmach,
ϵmach|δi|≤ϵmachm∏i=1m(1+δi)=1+θ(m),|θ(m)|≤mϵmach1−mϵmach
让我们定义对实数运算的真函数为X ,ÿ ,žfx,y,z
f(x,y,z)=(x×z)−(y×z)
和在符合IEEE的浮点算法中的两个版本的函数实现,分别为和,它们对浮点表示形式进行操作,如下所示:〜˚F 2〜X =X(1+δX),〜ÿ,〜žf1~f2~X〜= x (1 + δX),ÿ〜,ž〜
F1个〜(x〜,ÿ〜,ž〜)= (x〜⊗ ž〜)⊖ (y〜⊗ ž〜),
f2~(x~,y~,z~)=(x~⊖y~)⊗z~.
错误分析:f1~
f1~=((x(1+δx)×z(1+δz))(1+δ⊗xz)(x~⊗z~)−(y(1+δy)×z(1+δz))(1+δ⊗yz)(y~⊗z~))(1+δ⊖)=xz(1+δx)(1+δz)(1+δ⊗xz)(1+δ⊖)−yz(1+δy)(1+δz)(1+δ⊗yz)(1+δ⊖)=xz(1+θxz,1)−yz(1+θyz,1).
在这里,。
|θxz,1|,|θyz,1|≤4ϵmach1−4ϵmach
类似地,对于
在这里,。f2~
f2~=(((x(1+δx)−y(1+δy)(1+δ⊖xy))×(z(1+δz)))(1+δ⊗)=xz(1+δx)(1+δz)(1+δ⊖xy)(1+δ⊗)−yz(1+δy)(1+δz)(1+δ⊖xy)(1+δ⊗)=xz(1+θx,2)−yz(1+θy,2).
|θx,2|,|θy,2|≤4ϵmach1−4ϵmach
因此,对于和我们得到了相同类型的表达式,因此,从数值的角度来看,我不明白为什么一个实现比另一个实现更可取(除了与相比,仅执行2个浮点运算。f1~f2~f2~f1~
计算相对误差将表明,问题出在以下事实: 和可能非常接近(抵消)。xy
|f1~−f||f|=|xz+xzθxz,1−yz−yzθyz,1−(xz−yz)||xz−yz|=|xθxz,1−yθyz,1||x−y|≤|x|+|y||x−y|4ϵmach1−4ϵmach,
|f2~−f||f|=|xz+xzθx,2−yz−yzθy,2−(xz−yz)||xz−yz|=|xθx,2−yθy,2||x−y|≤|x|+|y||x−y|4ϵmach1−4ϵmach.
之间的细微差别可能会使两个数值实现之一略微变好或变差,具体取决于。但是,我怀疑这可能有任何意义。该结果完全有意义,因为无论如何,如果必须使用浮点算术计算和的值足够接近(对于您使用的精度如果使用,则没有定标可以显着帮助您:你已经遇到麻烦了。X ,ÿ ,ž (X - Ý )X ÿθx,y,z(x−y)xy
注意:以上所有讨论均假设没有上溢或下溢,即,是所有正常浮点数的集合。˚F 0x,y,z,f(x,y,z)∈F0F0