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.2Skriptsprachen (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...

Antworten auf die Frage(5)

Ihre Antwort auf die Frage