Hallo Matthias,
$wert_1 = 7.8862215xxxxxxE32
$wert_2 = 7.8862215xxxxxxE32
Die 'x' wären jetzt durchaus noch interessant - aber wahrscheinlich sind sie tatsächlich deckungsgleich.
ABER, wenn ich $wert_1 - $wert_2 rechne kommt statt 0, 59000xxxxxxx
raus, das kann doch nicht sein, woher kommt so eone gigantische Abweichung?
Gemessen an den ursprünglichen Zahlenwerten ist das doch fast nichts! Ich weiß nicht, mit welcher Genauigkeit float-Werte in PHP gespeichert werden, aber gehen wir mal vom worst case aus und nehmen das IEEE-Fließkommaformat mit 32bit an. Dieses Format sieht 8bit für den Exponenten (und das Vorzeichen) vor, und 24bit für die Mantisse. 24bit entsprechen aber nur rund 8 Dezimalstellen. Das heißt, dass bei Zahlen im Bereich 1E+32 durchaus Rundungsfehler von 1E+24 auftreten können! Das Ergebnis, was du bekommst, ist also schon hervorragend genau.
Und selbst wenn PHP intern mit dem IEEE-Format für "double precision" rechnet, das 64bit insgesamt vorsieht, davon 52bit für die Mantisse, dann sind das auch "nur" etwa 18 Dezimalstellen.
Du darfst nie vergessen, dass auch Fließkommazahlen nur mit einer begrenzten Genauigkeit gespeichert werden!
Schönen Abend noch,
Martin
Was sagt die kleine Kerze zur großen Kerze?
Ich gehe heute nacht aus!