ieee754 floating-point computer-science precision programming-fundamentals

IEEE 754 Gleitkomma-Standard: Computer-Arithmetik verstehen

Warum ist 0,1 + 0,2 != 0,3 in der Programmierung? Erfahren Sie mehr über die Mechanismen der IEEE 754 Gleitkommadarstellung und -präzision.

2026-04-11

IEEE 754 Gleitkomma-Standard: Computer-Arithmetik verstehen

Wenn Sie jemals programmiert haben, sind Sie wahrscheinlich auf ein seltsames Phänomen gestoßen: 0,1 + 0,2 ergibt nicht 0,3. Stattdessen erhalten Sie etwas wie 0,30000000000000004. Dies ist kein Fehler in Ihrer Programmiersprache, sondern eine grundlegende Folge davon, wie Computer reelle Zahlen gemäß dem IEEE 754-Standard darstellen.

In diesem Leitfaden werden wir den IEEE 754-Standard entmystifizieren, erklären, wie Gleitkommazahlen gespeichert werden, und Tipps für den Umgang mit Präzisionsproblemen in Ihrem Code geben.


Was ist IEEE 754?

Der IEEE-Standard für Gleitkomma-Arithmetik (IEEE 754) ist der am weitesten verbreitete Standard für die Gleitkomma-Berechnung. Er wurde 1985 eingeführt und definiert Formate für die Darstellung reeller Zahlen im Binärsystem sowie die darauf ausgeführten Operationen.

Die gängigsten Formate sind:

  • Einfache Genauigkeit (32-Bit): Wird als float in C/C++/Java verwendet.
  • Doppelte Genauigkeit (64-Bit): Wird als double in C/C++/Java verwendet und ist der Standard-Zahlentyp in JavaScript und Python.

Wie es funktioniert: Die Anatomie eines Floats

Eine Gleitkommazahl wird ähnlich wie in der wissenschaftlichen Notation ($1,23 \times 10^4$) dargestellt, jedoch im Binärsystem. Sie besteht aus drei Teilen:

  1. Vorzeichen-Bit (1 Bit): 0 für positiv, 1 für negativ.
  2. Exponent: Bestimmt die Skalierung der Zahl.
  3. Mantisse (Signifikand): Stellt die signifikanten Stellen dar.

64-Bit-Layout mit doppelter Genauigkeit:

  • Vorzeichen: 1 Bit
  • Exponent: 11 Bit
  • Mantisse: 52 Bit

Die verwendete Formel lautet: $(-1)^{Vorzeichen} \times (1,Mantisse) \times 2^{Exponent - Bias}$


Warum ist $0,1 + 0,2 \neq 0,3$?

Die Hauptursache ist, dass die meisten Dezimalbrüche im Binärsystem nicht exakt dargestellt werden können.

  • Im Zehnersystem kann ein Bruch genau dargestellt werden, wenn die Primfaktoren seines Nenners nur 2 und 5 sind (die Faktoren von 10).
  • Im Zweiersystem kann ein Bruch nur dann genau dargestellt werden, wenn die Primfaktoren seines Nenners nur 2 sind.

$0,1$ ist $1/10$. Da 10 den Faktor 5 enthält, wird es im Binärsystem zu einer unendlich wiederkehrenden Folge: 0,00011001100110011...

Computer müssen diese unendliche Folge runden, damit sie in 32 oder 64 Bit passt, was zu den winzigen Fehlern führt, die wir sehen.


Spezialwerte

IEEE 754 definiert auch mehrere Spezialwerte für den Umgang mit Grenzfällen:

  • NaN (Not a Number): Ergebnis undefinierter Operationen (z. B. 0/0).
  • Infinity ($\infty$): Ergebnis von Überlauf oder Division durch Null (1/0).
  • Negative Null (-0): Unterscheidet sich in einigen Berechnungen von der positiven Null.

Best Practices für Entwickler

  1. Verwenden Sie niemals == für Floats: Prüfen Sie immer, ob die Differenz kleiner als ein winziger Wert (Epsilon) ist.
    if (Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON) { ... }
    
  2. Dezimalzahlen für Geld verwenden: Verwenden Sie für Finanzberechnungen spezialisierte Bibliotheken (wie decimal.js) oder speichern Sie Werte als Ganzzahlen (z. B. Cent statt Euro).
  3. Bereich beachten: Die doppelte Genauigkeit kann sehr große Zahlen darstellen, aber die Präzision nimmt ab, je größer die Zahlen werden.

Häufig gestellte Fragen FAQ

F: Ist die Gleitkomma-Berechnung nicht deterministisch? A: Im Allgemeinen nein. Bei gleichen Eingabewerten und gleichem Rundungsmodus sollte IEEE 754 die gleichen Ergebnisse liefern. Verschiedene Compiler oder CPU-Befehle (wie FMA) können jedoch geringfügige Abweichungen verursachen.

F: Was ist „BigInt“? A: BigInt (in JS) verarbeitet Ganzzahlen mit beliebiger Genauigkeit. Es kann keine Brüche verarbeiten. Für Brüche benötigen Sie eine Decimal-Bibliothek.

F: Wie viele Dezimalstellen Genauigkeit hat ein Double? A: Ein 64-Bit-Double hat etwa 15 bis 17 signifikante Dezimalstellen.


Verwandte Tools

  • Einheitenumrechner – Präzise Umrechnungen zwischen verschiedenen Maßeinheiten.
  • JSON-Formatierer – Überprüfen Sie, wie Zahlen in JSON-Daten dargestellt werden.
  • Hash-Generator – Überprüfen Sie die Datenintegrität, wenn jedes Bit zählt.