Gizmoop

Warum 0,1 + 0,2 nicht genau 0,3 ergibt

Von [VORNAME NACHNAME] · Zuletzt geprüft am

Tippen Sie 0,1 + 0,2 in eine Tabellenkalkulation und lassen Sie sich zwanzig Nachkommastellen anzeigen. Es steht dort nicht 0,3. Das ist kein Fehler des Programms.

Der Grund: ein anderes Stellenwertsystem

Computer rechnen binär, also in Zweierpotenzen. Eine Zahl lässt sich dort genau darstellen, wenn sie sich als Summe von Halben, Vierteln, Achteln und so weiter schreiben lässt.

0,5 ist ein Halbes — exakt. 0,25 ist ein Viertel — exakt. 0,1 ist im Binärsystem aber periodisch, genau wie 1/3 im Dezimalsystem periodisch ist. Es wird nach endlich vielen Stellen abgeschnitten, und dabei entsteht ein winziger Fehler.

Addiert man zwei solche gerundeten Werte, addieren sich auch die Fehler. Das Ergebnis liegt minimal neben 0,3 — üblicherweise bei 0,30000000000000004.

Dasselbe Problem, das wir schon kennen

Im Dezimalsystem lässt sich 1/3 nicht endlich schreiben, weil 3 kein Teiler einer Zehnerpotenz ist. Im Binärsystem lässt sich 1/10 nicht endlich schreiben, weil 5 kein Teiler einer Zweierpotenz ist.

Es ist exakt dieselbe Mechanik, nur mit einer anderen Basis. Ausführlich steht das unter Bruch in Dezimalzahl umwandeln.

Wo es praktisch stört

Bei Geldbeträgen. Wer Cent-Beträge über tausende Zeilen aufsummiert, kann am Ende einen Cent danebenliegen. Buchhaltungssysteme rechnen deshalb in ganzen Cent statt in Euro mit Komma.

Bei Gleichheitsprüfungen. Die Abfrage „ist a gleich 0,3" schlägt fehl, obwohl a rechnerisch 0,3 sein sollte. Man vergleicht deshalb mit einer Toleranz statt exakt.

Beim Runden auf der Kippe. Ein Wert, der eigentlich exakt 2,5 wäre, intern aber knapp darunter liegt, rundet unerwartet ab.

Wie unsere Rechner damit umgehen

Der Bruchrechner verwendet gar keine Gleitkommazahlen. Er rechnet mit ganzen Zahlen beliebiger Größe — Zähler und Nenner bleiben getrennt und exakt, auch bei hunderten Stellen. Erst für die Anzeige der Dezimalform wird umgerechnet.

Beim Mehrwertsteuer-Rechner wird durchgehend ungerundet gerechnet und ausschließlich für die Anzeige auf Cent gerundet. Würde man zwischendurch runden, summierten sich die Abweichungen bei großen Beträgen zu echten Cent-Differenzen.

Häufige Fragen

Ist 0,1 + 0,2 ungleich 0,3 ein Bug?

Nein. Es liegt daran, dass 0,1 im Binärsystem nicht endlich darstellbar ist — genau wie 1/3 im Dezimalsystem. Praktisch jede Programmiersprache verhält sich so.

Wie vermeidet man den Fehler?

Indem man mit ganzen Zahlen rechnet — etwa in Cent statt in Euro — oder mit exakter Bruchrechnung, und erst am Ende für die Anzeige rundet.

Selbst ausprobieren

Rechnen Sie 1/10 + 2/10 im Bruchrechner. Das Ergebnis ist 3/10 — exakt, ohne Nachkommarauschen, weil dort nie eine Gleitkommazahl entsteht.

Weitere Rechner