Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Java double Multiplikation

Java double Multiplikation

rofl
rofl18.06.0515:47
Gerade verlässt mich mein Glaube an Java:

Ich mache nix anderes als:

System.out.println(100.0*1.1);

und erhalte als Ergebnis:

110.00000000000001

Getestet sowohl unter 1.5 als auch 1.4.2.

Natürlich könnte man sage, es liegt an der Darstellung der 0.1 im Speicher, aber das müsste doch Java bereinigen können. Kann jemand das Problem reproduzieren?

Danke
-rofl
0

Kommentare

rofl
rofl18.06.0515:52
Also PHP, Purebasic, cpp, und der Taschenrechner (TI und OSX) machen es richtig...
0
rofl
rofl18.06.0516:09
So es ist doch das schöne alte floating point Problem:


Man sollte doch meinen was andere Sprachen schaffen hätte Java auch im Griff, klar es ist nur eine Abweichung von 10^-15 aber sehr unschön, und unnötig.

Naja muss man die Ausgabe halt formatieren und so tun als ob alles okay ist...
0
Donar-18.06.0516:11
Gugg mal, ob die anzahl der dargestellten Dezimalstellen in den anderen Programmen etc. genau so groß ist...

Fließkommazahlen haben je nach System zwischen 10 und 15 signifikante Stellen (Bin zu faul die IEEE Norm nachzuguggen). Deine Beispielausgabe hat 14 Dezimalstellen und zusätzlich noch die 3 vor dem Dezimalpunkt. Ergo bist du arg an der Grenze.

Der Hauptgrund ist aber, dass 1.1 keine Zahl ist, die sich binär exakt als Bruch darstellen lässt (obwohl das als Dezimalbruch 1a geht! 1/3 schaut als Dezimalzahl auch blöd aus...). Genaueres unter:

Wenn du es wirklich genau brauchst (wissenschaftliche Arbeiten) gibt es High Precision Klassen, die aber stinken langsam sind...
0
rofl
rofl18.06.0516:12
Das ist mir alles bewusst, sehr bewusst sogar, aber an 100*1.1 zu scheitern ist schon traurig - oder?
Schließlich ist man ja heutzutage dank gcc und php verwöhnt.
0
DarkVamp
DarkVamp26.06.0516:23
Hi,

lasse ihn mal mit new Double(100.00) und new Double(1.100) rechnen.

0
rofl
rofl26.06.0516:26
Ja klar Double wird warscheinlich gehen, aber ich arbeite meist doch mit primitiven.
0
DarkVamp
DarkVamp26.06.0521:47
Hi,

die Genauigkeit ist hier das Problem...

Evtl. reicht es auch 100.0000 und 1.1000 zu nehmen die Nachkommastellen alle mit angeben...
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.