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