Was ist 70 × 0.01 ?

Neulich in der XSL-Mailing-Liste hatte jemand einen Fehler in meinem Lieblings-Transformator Saxon gefunden:

70 × 0.01 = 0.7000000000000001

Wie kann das sein? Mein Lieblings-XSLT-Buch-Autor und Saxon-Programmierer Michael Kay kennt die Antwort: In XSLT 1.0 wird mit der Genauigkeit double precision floating point gerechnet, seit XSLT 2.0 mit dezimaler Genauigkeit. Was heißt das im Detail? Beide Zahlen müssen mit Exponent und Mantisse in insgesamt 64 Bits als Binärzahl dargestellt werden. Bei 70 klappt das ohne Probleme, nur 0.01 lässt sich nicht exakt als Binärzahl wiedergeben. Und durch die Näherung gibt das dann irgendwann einen Rundungsfehler… schluck! — Zum Glück gibt es XSLT 2.0, uff :-)

Dieser Beitrag wurde unter Sonstiges veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Eine Antwort zu Was ist 70 × 0.01 ?

  1. Klaus Daube sagt:

    „Und durch die Näherung gibt das dann irgendwann einen Rundungsfehler“. Na ja, das kennen wir doch seit den ersten tagen der binären rechner, sei es nun DEC PDP 8 oder IBM /360 oder Cray I. Lediglich eine IBM 1620 (oder die Zx von Zuse) waren dezimale rechner. Solange die abweichung soooooo weit vom komma weg ist, ist da ja noch harmlos.

    Es gibt aber leute, welche geschätzte (oder gemessene) werte – die selten mehr als 3 sichere ziffern haben – durch eine rechenmühle leiten und dann den 7 dezimalstellen nach dem komma glauben. Sie meinen: je mehr dezimalstellen, desto genauer. Mathematiker sprechen hier von fehler-fortpflanzung und die fehler-rechnung ist eine eigene disziplin.

    Klaus Daube

Die Kommentare sind geschlossen.