Vamos denotar por (eu estava com preguiça de tentar obter uma versão circulada do operador de divisão) os análogos de ponto flutuante da multiplicação exata ( × ), adição ( + ) e subtração ( - ), respectivamente. Vamos assumir (IEEE-754) que, para todos eles
[ x ⊕ y ] = ( x + y ) ( 1 + δ ⊕ ) ,⊗ , ⊕ , ⊖×+-
onde ε m um c h é a epsilon máquina que dá um limite superior sobre o erro relativo devido ao arredondamento. Também usaremos o seguinte lema (assumindo que todos | δ i | ≤ ϵ
[ X ⊕ y] = ( x + y) ( 1 + δ⊕) ,| δ⊕| ≤ ϵm a c h,
ϵm a c h e
mnão é muito grande) que pode ser facilmente comprovada:
m Π i = 1 (1+ δ i )=1+θ(| δEu| ≤ ϵm a c hm∏i=1m(1+δi)=1+θ(m),|θ(m)|≤mϵmach1−mϵmach
Vamos definir a verdadeira função que opera nos números reais x , y , z comofx , y, z
f( x , y, z) = ( x × z) - ( y× z)
e duas versões da implementação da função na aritmética de ponto flutuante compatível com IEEE como e ~ f 2 que operam nas representações de ponto flutuante ˜ xf1 1~f2~ , como se segue:x~= x ( 1 + δx) , y~, z~
f1 1~( x~, y~, z~) = ( x~⊗ z~) ⊖ ( y~⊗ z~) ,
f2~( x~, y~, z~) = ( x~⊖ y~) ⊗ z~.
Análise de erro para :f1 1~
f1 1~= ( ( 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
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,y,z(x−y)xy
x,y,z,f(x,y,z)∈F0F0