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
.
|