0.30000000000000004.com

Die Tücken der Fließkomma-Mathematik

von - 29.07.2022
Foto: 0.30000000000000004.com
Ihre Sprache ist nicht kaputt, sie macht Fließkomma-Mathematik. Da Computer von Haus aus nur ganze Zahlen speichern können, brauchen sie eine Möglichkeit, Dezimalzahlen darzustellen. Diese Darstellung ist allerdings nicht ganz exakt.
Besonders tückisch ist diese Rechenschwäche moderner Computer, wenn man als Entwickler eine Abfrage auf Gleichheit vornimmt, also etwa so:
x = 0.1 + 0.2
Wenn x = 0.3 dann
  mach' etwas ganz besonderes ...
Wen der Computer allerdings die ganz einfache Rechnung 0.1 + 0.2 durchführt, kommt dabei nicht in jedem Fall 0.3 heraus, sondern beispielsweise 0.30000000000000004. Für obigen Pseudo-Code bedeutet das, dass er x als ungleich 0.3 ansieht und die Anweisung etwas ganz besonderes zu machen nicht ausführt.
Wer sich dafür interessiert, warum das so ist und was man dagegen unternehmen kann, sollte diesen Beitrag auf 0.30000000000000004.com lesen. Für knapp 70 Programmiersprachen wird dort auch gezeigt, welche Ergebnisse die Addition von 0.1 und 0.2 liefert, darunter findet man auch Ergebnisse, die kleiner sind als 0.3.
In CSharp und anderen .NET-Sprachen kann man mit dem Datentyp Decimal vorbeugen. Dieser liefert 28-29 Stellen Genauigkeit, hat aber auch zwei Nachteile: Zum einen einen deutlich kleineren Geltungsbereich und zum anderen den großen Speicherbedarf (16 Byte) jeder einzelnen Zahl (zum Vergleich: Float kommt mit 4 und Double mit 8 Byte aus).
Verwandte Themen