Es ist ziemlich normal, dass einfache Dezimalzahlen wie
0.1 oder 0.7 nicht in ihre
internen binären Entsprechungen konvertiert werden können, ohne
einen kleinen Teil ihrer Genauigkeit zu verlieren. Das kann zu
verwirrenden Ergebnissen führen. So wird floor((0.1 +
0.7) * 10) normalerweise 7 statt des
erwarteten Wertes 8 zurück geben (als Ergebnis
der internen Entsprechung von 7.9999999999....
Das gründet sich auf die Tatsache, dass es unmöglich ist, manche
Dezimal-Zahlen durch eine endliche Anzahl an Nachkomma-Stellen
darzustellen. Dem Wert 1/3 entspricht z.B. der interne
Wert von 0.3333333. . ..
Deshalb sollten Sie nie den Ergebnissen von Fließkomma-Operationen
bis auf die letzte Nachkomma-Stelle trauen und nie solche auf
Gleichheit prüfen. Benötigen Sie wirklich eine größere Genauigkeit,
sollten sie die
mathematischen Funktionen beliebiger Genauigkeit
oder die Gmp Funktionen benutzen.
|