Skip to content

Glossary

IEEE 754

Der Gleitkomma-Standard hinter jeder CPU

By Published Updated

IEEE 754 ist der Standard für Gleitkomma-Arithmetik, erstmals 1985 veröffentlicht und 2008 sowie 2019 aktualisiert. Er definiert binäre und dezimale Gleitkomma-Formate, Rundungsverhalten, Ausnahmebehandlung und die Sonderwerte (NaN, ±Unendlich, −0).

Das Standard-Format mit doppelter Präzision ist das, was JavaScript-Numbers, Python-Floats und die meisten anderen „Zahlen“-Typen in modernen Sprachen verwenden:

  • 64 Bit insgesamt
  • 1 Bit Vorzeichen
  • 11 Bit Exponent
  • 52 Bit Mantisse
  • ~15–17 signifikante Dezimalstellen Präzision
  • Bereich grob 4,9e−324 bis 1,8e+308

Das berühmte Beispiel: 0.1 + 0.2 === 0.3 liefert false in nahezu jeder Sprache. Der Grund: 0.1 und 0.2 haben keine exakten Binärdarstellungen (genau wie 1/3 keine exakte Dezimaldarstellung hat). Ihre gespeicherten Werte liegen sehr nah an, aber nicht exakt bei 0.1 und 0.2, und die Summe häuft den winzigen Fehler an. Das Ergebnis ist 0.30000000000000004.

Implikationen für unsere Tools: Die meisten Umrechnungen sind auf ~15 Dezimalstellen genau, was mehr ist als jede Eingabe, die wir akzeptieren. Wo es zählt: Kryptowährungsbeträge, wo 18-stelliges Wei den Number-Bereich übersteigt – wir verwenden dort BigInt, um die Präzision exakt zu halten.

Durchgerechnetes Beispiel

Betrachten Sie die Berechnung 0.1 + 0.2 in JavaScript. Das Literal 0.1 ist in IEEE-754-Binär tatsächlich 0.10000000000000000555111512312578… (das nächste darstellbare Double). 0.2 ist 0.20000000000000001110223024625157…. Sie zu addieren und auf das nächste darstellbare Double zu runden ergibt 0.30000000000000004440892098500626…, angezeigt als 0.30000000000000004. Die wahre mathematische Antwort 0.3 ist binär nicht exakt darstellbar – ihre Darstellung ist ebenfalls näherungsweise 0.299999…9989…. Der Fehler liegt im letzten ulp (unit in the last place), etwa 1 zu 10¹⁶. Für sichtbare Zahlen ist er unsichtbar; für Summen von Millionen kleiner Werte häuft er sich an: 0.1 hundertmal in einer Schleife zu summieren und mit 10.0 zu vergleichen liefert false (das Ergebnis ist 9.99999999999999822364…). Verwenden Sie Kahan-Summation oder kompensierte Summation, wenn Genauigkeit bei langen Akkumulationen zählt.

Zwei weitere Sonderwert-Stolpersteine, die man kennen sollte: Subnormale Zahlen (sehr kleine Werte nahe null mit reduzierter Präzision) tauschen darstellbaren Bereich gegen anmutigen Unterlauf, und signalisierende NaNs (sNaN) können genutzt werden, um bei nicht initialisiertem Speicher zu trappen, obwohl die meisten Sprachen alle NaNs auf stille NaNs (qNaN) abbilden und diese Unterscheidung nie dem Nutzercode preisgeben.

Wann und warum es zählt

IEEE 754 zählt immer, wenn Code Floats auf Gleichheit vergleicht, viele kleine Zahlen summiert oder Werte nahe den Grenzen des Formats verarbeitet. Der klassische Finanzfehler ist, „total = total + 0.01“ in einer Schleife millionenfach zu berechnen und festzustellen, dass das Ergebnis um genug abweicht, um eine Bilanzabstimmung scheitern zu lassen. Die Lösung ist, nie Floats für Geld zu verwenden – nutzen Sie BigDecimal, Pythons decimal.Decimal, JavaScripts decimal.js, oder speichern Sie Beträge als Ganzzahlen (Cents statt Dollar, Satoshis statt Bitcoin, Wei statt ETH). Der andere klassische Fehler ist die katastrophale Auslöschung beim Subtrahieren zweier nahezu gleicher Floats – die führenden signifikanten Stellen heben sich auf und übrig bleibt nur das Rauschen in den unteren Bits. Lehrbücher der numerischen Analysis widmen ganze Kapitel Algorithmen (z. B. der stabilen Varianzformel, Kahan-Summation, Welfords Online-Algorithmus), die diese Falle vermeiden. Quelle: Goldberg D. — What Every Computer Scientist Should Know About Floating-Point Arithmetic.

Die fünf Sonderwerte, die jeder vergisst: IEEE 754 definiert +0 und −0 als verschieden (sie vergleichen als gleich, erzeugen aber bei der Division unterschiedliche Ergebnisse – 1/+0 ist +∞, während 1/−0 −∞ ist), +Unendlich und −Unendlich für Überlauf und NaN (Not a Number) für undefinierte Operationen wie 0/0 oder √−1. NaN ist bekanntlich ungleich zu sich selbst – NaN === NaN ist false – wodurch IEEE 754 Fehler durch die Berechnung propagiert, statt sie zu maskieren. Die Number.isNaN()-Prüfung existiert in jeder modernen Sprache genau deshalb, weil die naheliegende Gleichheitsprüfung nicht funktioniert.

Wenn man wirklich exakte Dezimalzahlen braucht – und was man stattdessen nutzt: Für Geld nie Floats verwenden. Javas BigDecimal, Pythons decimal.Decimal, JavaScript-Bibliotheken wie decimal.js und PostgreSQLs NUMERIC-Typ implementieren alle exakte Dezimalarithmetik. Die Kosten sind etwa 10- bis 100-mal langsamer als native Float-Operationen, was für jedes nutzerseitige Transaktionssystem in Ordnung ist. Für wissenschaftliches Rechnen, bei dem das Rundungsverhalten zählt, erzeugt IEEE 754s Runden-zum-nächsten-Geraden (kaufmännisches Runden) stabile akkumulierte Summen; Runden-auf-halbe-aufwärts verzerrt nach oben. Die meisten Sprachen nutzen aus diesem Grund standardmäßig Runden-auf-halbe-gerade. Quelle: IEEE 754-2019 — Floating-Point Arithmetic.

Frequently asked questions

Was ist IEEE 754?
IEEE 754 ist der internationale Standard für Gleitkomma-Arithmetik, der in praktisch allen CPUs und Programmiersprachen verwendet wird. Er definiert, wie reelle Zahlen binär als Vorzeichen-, Exponenten- und Mantissenfelder dargestellt werden.
Warum ist 0.1 + 0.2 in den meisten Sprachen nicht gleich 0.3?
0.1 und 0.2 lassen sich in binärem Gleitkomma nicht exakt darstellen – sie werden als nächster darstellbarer Wert gespeichert. Das Addieren zweier Näherungen häuft den Rundungsfehler an und ergibt 0.30000000000000004 in IEEE-754-Double-Präzision.
Was ist der Unterschied zwischen float (32 Bit) und double (64 Bit)?
Ein 32-Bit-float hat etwa 7 signifikante Dezimalstellen Präzision; ein 64-Bit-double etwa 15–17. Finanz- und wissenschaftliche Berechnungen erfordern typischerweise Double-Präzision, um die Anhäufung von Rundungsfehlern zu vermeiden.
Wie handhabe ich exakte Dezimalarithmetik im Code?
Verwenden Sie eine Dezimalbibliothek (Pythons decimal-Modul, Javas BigDecimal, SQLs NUMERIC-Typ) statt nativer Floats. Alternativ in Ganzzahl-Cents für Währung arbeiten – speichern Sie 1,99 $ als 199 und wandeln Sie nur zur Anzeige in einen Dezimal-String um.

Related

Published May 15, 2026 · Last reviewed May 31, 2026