Bezeichnen wir mit (ich war faul beim Versuch, eine eingekreiste Version des Divisionsoperators zu erhalten) die Gleitkommaanaloga der exakten Multiplikation ( ), Addition ( ) bzw. Subtraktion ( ). Wir nehmen an (IEEE-754), dass für alle von ihnen
wobei das Maschinen-Epsilon ist, das eine Obergrenze für den relativen Fehler aufgrund von Rundungen angibt. Wir werden auch das folgende Lemma verwenden (vorausgesetzt, alle und ist nicht zu groß), das leicht bewiesen werden kann:
⊗,⊕,⊖×+−
[x⊕y]=(x+y)(1+δ⊕),|δ⊕|≤ϵmach,
ϵmach|δi|≤ϵmachm∏i=1m(1+δi)=1+θ(m),|θ(m)|≤mϵmach1−mϵmach
Definieren wir die wahre Funktion , die mit reellen Zahlen als arbeitetfx,y,z
f(x,y,z)=(x×z)−(y×z)
und zwei Versionen der Funktionsimplementierung in IEEE-kompatibler Gleitkomma-Arithmetik als und , die mit Gleitkomma-Darstellungen wie folgt:f1~f2~x~=x(1+δx),y~,z~
f1~(x~,y~,z~)=(x~⊗z~)⊖(y~⊗z~),
f2~(x~,y~,z~)=(x~⊖y~)⊗z~.
Fehleranalyse für :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).
Hier .
|θxz,1|,|θyz,1|≤4ϵmach1−4ϵmach
In ähnlicher Weise gilt für
Hier .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
Also haben wir sowohl für als auch für Ausdrücke des gleichen Typs erhalten, daher sehe ich nicht, warum eine Implementierung aus numerischer Sicht einer anderen vorgezogen wird (mit Ausnahme der Tatsache, dass führt im Vergleich zu ) nur 2 Gleitkommaoperationen aus .f1~f2~f2~f1~
Die Berechnung des relativen Fehlers zeigt, dass das Problem darin besteht, dass und sehr nahe beieinander liegen können ( Löschung ).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.
Geringe Unterschiede zwischen 's können dazu führen, dass eine der beiden numerischen Implementierungen je nach geringfügig besser oder schlechter wird . Ich bezweifle jedoch, dass dies von Bedeutung sein kann. Das Ergebnis ist absolut sinnvoll, denn egal was passiert, wenn Sie berechnen müssen , wenn und nahe genug an Werten (für die Genauigkeit, mit der Sie arbeiten) unter Verwendung von Gleitkomma-Arithmetik liegen, hilft Ihnen keine Skalierung erheblich: Sie sind bereits in Schwierigkeiten.θx,y,z(x−y)xy
NB: Alle obigen Diskussionen setzen keinen Überlauf oder Unterlauf voraus, dh , wobei die Menge aller normalen Gleitkommazahlen ist.x,y,z,f(x,y,z)∈F0F0