• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Grund für Rundungsfehler bei 10.5 - 0.5?

Willibergi

Mitglied
Moin,
wenn ich in Java 10.5 - 0.5 rechne, kommt 9.9999999999998 heraus.
Ich weiß, dass ich damit leben muss und dass ich, um diesen Fehler zu vermeiden, die Klasse BigDecimal benutzen muss.
Aber was ich bis jetzt noch nicht herausfinden konnte, ist, warum das ganze passiert.
Könnt ihr mir da helfen?
LG Willibergi
 
Ok, dort steht, dass 12,45 im Binärsystem 1100,0111001100110011001100.... ist.
12 ist aber 1100 und 45 ist 101101. Warum ist dann 12,45 nicht 1100,101101?
Da wäre es doch schlauer, die Zahlen so zu speichern?!
Um das Komma loszuwerden kann man ja (wie es auch gemacht wird) die Zahl so lange erweitern, dass kein Komma mehr vorhanden ist und dann in einem Extrabit die Kommastelle speichern?!
 
Zuletzt bearbeitet:
was ich bis jetzt noch nicht herausfinden konnte, ist, warum das ganze passiert.
Das war Deine Frage, und meine Link-Empfehlung beantwortet, wie es zu dem Rundungsfehler kommt:
Wikipedia schrieb:
Durch die unterschiedliche binäre Darstellung der Zahlen kann es in beiden Systemen zu Artefakten kommen. Das heißt: Rationale Zahlen, die im Dezimalsystem „rund“ erscheinen, zum Beispiel
91ed3475a8a71fc65e1f40577d0ea0a9.png
, können im Binärsystem nicht exakt dargestellt werden (der Wert ist
dcc55bbfb600cc30751986117449528a.png
). Stattdessen wird ihre Binärdarstellung im Rahmen der jeweiligen Rechengenauigkeit gerundet, so dass man bei der Rückumwandlung ins Dezimalsystem z. B. den Wert 12,44999999900468785 erhält.

Es ist halt so, wie es ist:
  1. https://de.wikipedia.org/wiki/Maschinengenauigkeit
  2. https://de.wikipedia.org/wiki/Rundungsfehler
  3. https://de.wikipedia.org/wiki/Gleitkommazahl
 
Zuletzt bearbeitet:
Zurück
Oben