T-Board.ch

T-Board.ch (http://www.t-board.ch/vbb/index.php)
-   Programmieren & Co. (http://www.t-board.ch/vbb/forumdisplay.php?f=17)
-   -   Java: Datentypen konvertierung und ausgabe einer double-variable (http://www.t-board.ch/vbb/showthread.php?t=10347)

mix 23.01.2010 14:15

Java: Datentypen konvertierung und ausgabe einer double-variable
 
Hi,

Bin mal wieder hier und hab gedacht könnte mal wieder was fragen, mal schauen ob noch wer hier ist ;)

Habe jetzt dann eine Java prüfung und dazu eine kleine Frage:
In einer Beispiel prüfung ist gefragt was folgendes ausgibt:
Code:
// d hat den datentyp double
for (d = 1.0; d >= 0.4; d -= 0.3);

System.out.println(d);

Das gibt dann 0.39999999999999997 zurück. Wieso wird da nicht 0.4 zurückgegeben?
Die Schleife wird ja 2x ausgeführt: zuerst auf 0.7 und dann auf 0.4. Wenn ich in der Schleife das "d" ausgeben lasse wird mir explizit auch 0.7 ausgegeben und nicht 0.69999999999999997.
Wieso wird dann beim andern sysout dies so ausgegeben? Ist das weil das irgendwie versucht irgendeine grösstmögliche genauigkeit oder so hinzubringen?

Grüsse
Michael

spross 25.01.2010 13:46

Da der Computer "nur" Nullen und Einsen kennt, kann er keine ungeraden Zahlen abbilden. Also Fliesskommazahlen kann man nicht immer in Bits ausdrücken. Ausser in Wissenschaftlicher Form (z.B. 1.2345E-5). Man glaubt es kaum, ist aber so :)

Deshalb wird ein double (float mit doppelter Genauigkeit) immer in einer maximalen Fliesskommazahl abgebildet.

Entweder verwendest du BigDecimal, wo du genau definieren kannst, wie deine Fliesskommazahlen aussehen und sich verhalten sollen, oder du rundest dein Ergebnis.

Die Insel kennst du: http://openbook.galileodesign.de/ja...40000A91F032241
Oder Kollege Torsten: http://www.torsten-horn.de/techdocs...atierungRundung

Und falls es dich interessiert wie Fliesskommazahlen trotzdem irgendwie in Bits abgelegt werden, zieh dir den IEEE 754 floating point Standard rein: https://www.ibm.com/developerworks/...rary/j-jtp0114/

mix 29.01.2010 15:39

hey, danke für die info.

das mit dem IEE 754 standard kenne ich. Ich wusste nur nicht, dass es in diesem Fall auch zutrifft, ist aber ja eigentlich logisch :monkey:

Grüsse


Alle Zeitangaben in GMT +2. Es ist jetzt 12:26 Uhr.

Powered by: vBulletin Version 3.0.1 T-Modifications (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.