Krasse Rundungsfehler
-
Hey,
folgender Code:
for (float x = 0.5f; x > -0.5f; x-=0.1f) System.out.println(x);
liefert:
0.5
0.4
0.3
0.20000002
0.10000002
1.4901161E-8
-0.09999999
-0.19999999
-0.29999998
-0.39999998
-0.49999997Eigentlich müsste das ja 0.5, 0.4, 0.3, 0.2, 0.1, 0.0, -0.1, -0.2 usw ausgeben.
Wie kommt es, dass schon bei der ersten Nachkommastelle so heftige Rundungsfehler auftreten?
-
Das ist kein Java-Problem. Lies dir disbezüglich Punkt 3.13.1. "Warum rechnet Java falsch?" aus diesem Dokument mal durch:
-
Hi
heftige rundungsfehler? Wo siehst du die? bei der ersten nachkomma stelle?
0.20000002 - 0.2 = 0.00000002
-0.19999999 - -0.2 = 0.00000001kannst dir ja jetzt selber den absuluten fehler ausrechnen wenn du lustig bist. so gross ist der nun auch nicht. Dein ergebnis wird erst in der 7. stelle ungenau. und wenn du die erste nachkommastelle rundest, solltest du auch die 2.nachkommastelle betrachten.
und wegen der 1.4901161E-8 berücksichtige da bitte die E-8 also komma um acht stellen nach links.
Gruss
-
Ah, okay, also 0.1 gehört auch zu diesen Zahlen. Das erklärt einiges. Vielen Dank
:edit:
Heftige Rundungsfehlern war übertrieben. Die langen Zahlen haben mich ein wenig geschockt
Das 10^-8 hab ich zuerst nicht wahrgenommen, habs ja dann schnell wegeditiert
-
Hi
Stichwort Subtraktionskatastrophe / Numerkik
-
Termite schrieb:
Hi
Stichwort Subtraktionskatastrophe / Numerkik
Nein, das Problem sind hier nicht Rundungsfehler, sondern dass die exakten Zahlen schlichtweg keine darstellbaren floating-point Zahlen sind.