Pentium-Arithmetik
Nichts kann so falsch sein, dass man damit
nicht korrekte Mathematik betreiben könnte. Die korrekte Pentium-Arithmetik
lässt sich zum Beispiel nutzen, um den FDIV-Bug zu korrigieren.
Um den Umgang mit den betroffenen
FDIV-Bug-Zahlen zu vereinfachen, ist hier eine besondere Darstellung gewählt:
die ersten beiden Mantissen-Bytes werden als Word, und der Rest als rationale
Zahl zwischen 0 und 1 dargestellt.
Eine Menge W heisst Word-Pattern-Menge mit
W={k}, k Î N, 2^15 £ k < 2^16
Die Pentium-Pattern-Menge ist eine
Untermenge
von W:
P{p}
Î W, mit
p
= 36863, 43007, 49151, 55295 ,59391 bzw.
p = 08FFFh, 0A7FFh,
0BFFFh, 0D7FFh, E7FFh
Jede reelle Zahl kann in der Form
x= ±(k + r) * 2^n dargestellt werden, mit
k
Î W,
r
Î R, 0 £ r < 1
n Î N
Beweis => klar! ( so
jedenfalls die übliche Beweisform
meines
ehemaligen Mathe-Profs J.G.Rieger)
Die "Patternabbildung" w(x)=k ist
eindeutig.
" n gilt:
w(x*2^n) = w(x)=k
Eine Zahl µ Î R heisst Pentium-Pattern-erhaltend (PPE), wenn
gilt: $ p,qÎP, so dass gilt: q = w(p*µ)
Eine Zahl µ Î R heisst
Pentium-Pattern-zerstörend (PPZ), wenn gilt "p,q ÎP : q <> w(p*µ)
Satz 1: 2^n ist PPE, Beweis: trivial.
Satz 2: 3 ist
PPE, Beweis: w(36863*3)=55295 Î P
Satz 3: 0.75 ist
PPE, Beweis: folgt aus 1 und 2
Satz 4: 5 ist
PPZ
Satz 5: p ist
PPZ
Beweis für Satz 5
Für p1=08FFFh Î P gilt:
w(p1*p) = w((36863+r)*2^n*p) =
w((36863+r)*p)
und da 0£r£1:
w (36863*ã) £ w(p1*p) < w(36864*p)
57904 £ w(p1*p) < 57906
Þw(p1*p)ÏP
analog
für p2..p5
Damit ist bewiesen,
dass die von Mathematikern im Internet vorgeschlagene Korrektur: X/Y =>
(X*0,75/Y*0,75) unzweckmäßig weil Pentium-pattern-erhaltend ist. Besser eignen
sich 5 oder p. Allerdings drohen hier in Grenzfällen Überlaufprobleme, der
sicherste und kleinste PPZ-Multiplikator ist 1,00001