Computerarithmetik

Warum ist in vielen Programmiersprachen der Vergleich 0.1 + 0.2 == 0.3 in doppelter Genauigkeit falsch?

  1. AWeil der Additionsbefehl Dezimalbrüche mitunter nicht korrekt addiert
  2. BWeil 0.3 ein Sonderwert ist, der als Gleitkommazahl nicht darstellbar ist, sodass der Vergleich stets falsch ist
  3. CWeil alle Werte durch gerundete, nahe liegende Werte dargestellt werden und sich durch Fehler geringfügig unterscheiden
Antwort und Erläuterung anzeigen

Antwort: C. Weil alle Werte durch gerundete, nahe liegende Werte dargestellt werden und sich durch Fehler geringfügig unterscheiden

0.1, 0.2 und 0.3 sind binär alle nicht exakt darstellbar und werden jeweils auf den nächstliegenden Wert gerundet gespeichert. Die gerundete Summe der Näherungen von 0.1 und 0.2 ergibt 0.30000000000000004 und stimmt in der letzten Stelle nicht mit der Näherung von 0.3, 0.29999999999999998…, überein. Gleitkommazahlen werden daher üblicherweise darauf geprüft, ob der Betrag der Differenz kleiner als eine kleine Toleranz ist. Der Additionsbefehl rundet normgerecht korrekt, und auch 0.3 ist als Näherungswert darstellbar.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Computerarithmetik

  1. Wie groß ist das Maschinenepsilon (Differenz zwischen 1 und der nächstgrößeren darstellbaren Zahl) bei einfacher Genauigkeit nach IEEE 754?
  2. Welche Kombination gibt die ungefähre Zahl zuverlässiger Dezimalstellen bei einfacher und doppelter Genauigkeit korrekt an?
  3. Welche Aufgabe haben denormalisierte Zahlen (subnormale Zahlen) nach IEEE 754?
  4. Bei Berechnungen mit vielen denormalisierten Zahlen werden manche Prozessoren stark verlangsamt. Welche Einstellung wird daher dort eingesetzt, wo Leistung Vorrang hat?
  5. Welches Ergebnis legt die Norm bei Gleitkommaoperationen nach IEEE 754 für die Division einer positiven Zahl durch 0 fest?