Warum werden Gleitkommazahlen so unterschiedlich gedruckt?
Es ist allgemein bekannt, dass (die meisten) Gleitkommazahlen nicht genau gespeichert werden (wenn das IEEE-754-Format verwendet wird). Also sollte man das nicht machen:
0.3 - 0.2 === 0.1; // very wrong
... wie es dazu führen wirdfalse
, es sei denn, ein bestimmter Typ / eine bestimmte Klasse mit willkürlicher Genauigkeit wurde verwendet (BigDecimal inJava/Rubin, BCMath in PHP,Math :: BigInt/Math :: BigFloat in Perl, um nur einige zu nennen).
Dennoch frage ich mich, warum, wenn man versucht, das Ergebnis dieses Ausdrucks zu drucken,0.3 - 0.2
Skriptsprachen (Perl undPHP) geben0.1
, aber "Virtual-Machine" diejenigen (Java, JavaScript undErlang) etwas ähnlicheres geben als0.09999999999999998
stattdessen?
Und warum ist es in Ruby auch inkonsistent?Version 1.8.6 (Codepad) gibt0.1
, version 1.9.3 (ideone) gibt0.0999...