|
 |
23.01.2010, 14:15
|
#1
|
|
Registriert
Lord of the Board
Registrierungsdatum: Oct 2002
Ort: there
Beiträge: 1.891
|
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
|
|
|
25.01.2010, 13:46
|
#2
|
|
Techn. Administrator eidg. dipl. Sekretärin
Postinator
Registrierungsdatum: Apr 2004
Ort: Ottikon b. K.
Beiträge: 520
|
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/
__________________
Best viewed with open eyes and a human brain!
I do know everything, just not all at once. It's a virtual memory problem.
In a world without borders and fences who needs windows and gates? think different
|
|
|
29.01.2010, 15:39
|
#3
|
|
Registriert
Lord of the Board
Registrierungsdatum: Oct 2002
Ort: there
Beiträge: 1.891
|
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
Grüsse
|
|
|
 |
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Ansicht |
Hybrid-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten
Es ist Ihnen nicht erlaubt, Anhänge anzufügen
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten
HTML Code ist Aus
|
|
|
Alle Zeitangaben in GMT +2. Es ist jetzt 12:20 Uhr.
|