IEEE-754-Rechner
0,1 als float: 0x3DCCCCCD, gespeichert 0,100000001490116… Vorzeichen, Exponent, Mantisse, Rundungsfehler exakt - für half, float und double, auch Hex zurück.
- Bits (Vorzeichen | Exponent | Mantisse)
- 0 01111011 10011001100110011001101
- Vorzeichen-Bit
- 0
- Exponent (Bits)
- 01111011
- Exponent gespeichert (mit Bias)
- 123
- Exponent tatsächlich (ohne Bias)
- -4
- Mantisse (Bits)
- 10011001100110011001101
- Zerlegung
- (−1)^0 × 2^−4 × 1,6000000238418579101…
- Exakt gespeicherter Wert
- 0,100000001490116119384765625
- Kürzeste Schreibweise (wie printf/toString)
- 0,1
- Exakt darstellbar?
- nein, gerundet
- Rundungsfehler (gespeichert − eingegeben)
- +1,49012 · 10^−9
- Relativer Fehler
- 1,49 · 10^−8
- Abstand zur nächsten Zahl (ULP)
- 7,45058 · 10^−9
- Kategorie
- Normalisiert
Rechenweg mit deinen Zahlen
- Format binary32 (float): 1 Vorzeichenbit, 8 Exponentbits (Bias 127), 23 Mantissenbits
- Exponent: 01111011 = 123; 123 − 127 = −4
- Wert = (−1)^0 × 2^−4 × 1,6000000238418579101… = 0,100000001490116119384765625
- Bits zusammengesetzt: 0 01111011 10011001100110011001101 = 0x3DCCCCCD
Was macht ein IEEE 754 Rechner?
Ein ieee 754 rechner zeigt dir, wie eine Dezimalzahl intern als Gleitkommazahl gespeichert wird. Das ist vor allem dann hilfreich, wenn eine Zahl im Code anders aussieht als erwartet, wenn du ein Hex-Bitmuster aus einem Debugger liest oder wenn du wissen willst, ob eine Zahl exakt darstellbar ist.
IEEE 754 zerlegt eine Zahl in Vorzeichen, Exponent und Mantisse. Aus diesen Feldern entsteht ein Bitmuster, das häufig als Hex-Wert angezeigt wird. Bei der Eingabe 0,1 im Format float entsteht zum Beispiel 0x3DCCCCCD. Die Zahl wird dabei nicht exakt gespeichert, sondern als 0,100000001490116119384765625. Die kürzeste Ausgabe bleibt trotzdem 0,1, weil viele Programmiersprachen beim Anzeigen runden.
Du wählst im Rechner die Richtung, gibst Dezimalzahl oder Bitmuster ein und stellst das Format half, float oder double ein.
Der Rechner ist damit ein ieee 754 konverter in beide Richtungen: Dezimal nach Hex und Bits, oder Hex beziehungsweise Binär zurück zur Dezimalzahl. Für 3F800000 als float kommt der Dezimalwert 1 heraus. Für BF800000 als float kommt -1 heraus. Das Vorzeichen-Bit ist dann anders, Exponent und Mantisse bleiben in diesem Beispiel gleich.
Wie funktioniert die IEEE 754 Berechnung?
Für normalisierte Werte lautet die Rechnung in Worten: Vorzeichenfaktor mal Zweierpotenz aus gespeichertem Exponenten abzüglich Bias mal eins plus Mantisse geteilt durch zwei hoch p. Der Bias hängt vom Format ab. Bei float gilt k = 8, p = 23 und Bias 127. Bei double gilt k = 11, p = 52 und Bias 1023. Bei subnormalen Werten wird nicht mit der führenden eins gerechnet, sondern nur mit Mantisse geteilt durch zwei hoch p.
Ein Beispiel mit 0,1 als float zeigt den Ablauf:
- Format: binary32 mit 1 Vorzeichenbit, 8 Exponentbits, 23 Mantissenbits und Bias 127
- Bits: 0 01111011 10011001100110011001101
- Vorzeichen-Bit: 0
- Exponent gespeichert: 123
- Exponent tatsächlich: -4
- Mantisse: 10011001100110011001101
- Hex-Darstellung: 0x3DCCCCCD
Der Exponent wird also nicht direkt als -4 gespeichert. Im Bitmuster steht 01111011, das dem gespeicherten Exponenten 123 entspricht. Erst nach Abzug des Bias ergibt sich der tatsächliche Exponent -4. Die Zerlegung lautet: (-1)^0 × 2^-4 × 1,6000000238418579101… Daraus entsteht der exakt gespeicherte Wert 0,100000001490116119384765625.
Wichtig für das Verständnis: Die Mantisse enthält nicht die Dezimalziffern der Eingabe. Sie beschreibt den binären Anteil der Zahl. Deshalb sehen Werte wie 0,1 oder 0,2 im Binärsystem oft periodisch aus und müssen auf die vorhandenen Mantissenbits gerundet werden.
float, double und half im Vergleich
Die Formate unterscheiden sich vor allem darin, wie viele Bits für Exponent und Mantisse verfügbar sind. Mehr Mantissenbits bedeuten mehr Genauigkeit, mehr Exponentbits bedeuten einen größeren Wertebereich. Der Rechner deckt half, float und double ab.
| Format | Bits | Exponent | Mantisse | Bias | Dezimalstellen |
|---|---|---|---|---|---|
| binary16 (half) | 16 | 5 | 10 | 15 | 3,31 |
| binary32 (float) | 32 | 8 | 23 | 127 | 7,22 |
| binary64 (double) | 64 | 11 | 52 | 1.023 | 15,95 |
Der Unterschied wird bei 0,1 sichtbar. Als float wird 0,1 zu 0x3DCCCCCD und exakt als 0,100000001490116119384765625 gespeichert. Als double wird 0,1 zu 0x3FB999999999999A und exakt als 0,1000000000000000055511151231257827021181583404541015625 gespeichert. Beide Werte sind gerundet, aber double liegt deutlich näher an der ursprünglichen Eingabe.
Nicht jede gerundete Zahl ist ein Problem. 1,5 ist als half exakt darstellbar und wird zu 0x3E00. Auch -2,75 ist als float exakt darstellbar und wird zu 0xC0300000. 1000 ist als double ebenfalls exakt darstellbar und wird zu 0x408F400000000000. Ob eine Zahl exakt ist, hängt nicht daran, ob sie im Dezimalsystem kurz aussieht, sondern daran, ob sie im Binärsystem ohne Rundung in die Mantisse passt.
Warum ergibt 0,1 + 0,2 nicht genau 0,3?
Der bekannte Effekt entsteht, weil 0,1 und 0,2 im double-Format bereits gerundete Werte sind. 0,1 wird als 0x3FB999999999999A gespeichert, 0,2 als 0x3FC999999999999A. Die exakt gespeicherten Werte lauten 0,100000000000000005551115123125… und 0,200000000000000011102230246251…
Wenn diese gespeicherten Werte addiert werden, entsteht als Ergebnis das Bitmuster 0x3FD3333333333334. Die Ausgabe lautet 0,30000000000000004. Der direkt eingegebene Wert 0,3 liegt dagegen bei 0x3FD3333333333333 und wird exakt als 0,299999999999999988897769753748… gespeichert.
Das heißt: Das Rechenergebnis und die eingegebene Dezimalzahl 0,3 landen auf benachbarten darstellbaren Werten. Beide werden bei kurzer Ausgabe oft harmlos dargestellt, aber im exakten Speicherwert sieht man den Unterschied.
Für die Praxis heißt das: Vergleiche Gleitkommazahlen nicht blind auf exakte Gleichheit, wenn vorher gerechnet wurde. Für Anzeigen, Messwerte oder Simulationen arbeitest du besser mit einer passenden Toleranz. Für Geldbeträge oder feste Dezimalstellen ist ein Dezimaltyp oder eine Ganzzahl-Skalierung oft besser geeignet als float oder double.
Typische Fehler beim IEEE 754 umrechnen
Ein häufiger Fehler ist die Verwechslung von Hex-Darstellung und Dezimalwert. 3F800000 ist kein Dezimalwert, sondern ein Bitmuster. Als float interpretiert bedeutet es 1. Als double wäre ein anderes Format nötig, denn double erwartet ein anderes Bitmuster. Achte deshalb immer darauf, ob du float, double oder half auswählst.
Ein zweiter Fehler ist die Annahme, dass die kürzeste Ausgabe dem exakten Speicherwert entspricht. Bei 0,1 als float zeigt die kurze Schreibweise 0,1, der gespeicherte Wert ist aber 0,100000001490116119384765625. Bei 0,3 als double zeigt die kurze Schreibweise 0,3, gespeichert ist 0,299999999999999988897769753748434595763683319091796875.
Auch Sonderwerte werden leicht falsch gelesen. IEEE 754 kennt positive und negative Null, Unendlich und Not a Number. Beispiele:
| Wert | float | double |
|---|---|---|
| +0 | 0x00000000 | 0x0000000000000000 |
| negative Null | 0x80000000 | 0x8000000000000000 |
| +∞ | 0x7F800000 | 0x7FF0000000000000 |
| -∞ | 0xFF800000 | 0xFFF0000000000000 |
| Not a Number (quiet) | 0x7FC00000 | 0x7FF8000000000000 |
Wenn du Hexwerte aus Speicherabbildern übernimmst, kann außerdem die Byte-Reihenfolge eine Rolle spielen. Der IEEE-754-Wert selbst ist durch die Bits definiert, aber die Reihenfolge der Bytes im Speicher kann anders aussehen. Prüfe daher, ob dein Hexwert schon in der richtigen Reihenfolge notiert ist.
Tabellen zum Nachschlagen
IEEE 754 Formate im Vergleich: half, float, double, quad
| Format | Bits | Exponent | Mantisse | Bias | Größte Zahl | Kleinste normale | Kleinste subnormale | Maschinengenauigkeit 2^−p | Dezimalstellen |
|---|---|---|---|---|---|---|---|---|---|
| binary16 (half) | 16 | 5 | 10 | 15 | 6,5504 · 10^4 | 6,1035 · 10^−5 | 5,9605 · 10^−8 | 9,7656 · 10^−4 | 3,31 |
| binary32 (float) | 32 | 8 | 23 | 127 | 3,4028 · 10^38 | 1,1755 · 10^−38 | 1,4013 · 10^−45 | 1,1921 · 10^−7 | 7,22 |
| binary64 (double) | 64 | 11 | 52 | 1.023 | 1,7977 · 10^308 | 2,2251 · 10^−308 | 4,9407 · 10^−324 | 2,2204 · 10^−16 | 15,95 |
| binary128 (quad) | 128 | 15 | 112 | 16.383 | 1,1897 · 10^4932 | 3,3621 · 10^−4932 | 6,4752 · 10^−4966 | 1,9259 · 10^−34 | 34,02 |
Dezimalzahlen als float (binary32) in Hex
| Zahl | Hex | Gespeichert | Exakt? |
|---|---|---|---|
| 0 | 0x00000000 | 0 | ja |
| 0,1 | 0x3DCCCCCD | 0,100000001490116119384765… | nein |
| 0,2 | 0x3E4CCCCD | 0,200000002980232238769531… | nein |
| 0,25 | 0x3E800000 | 0,25 | ja |
| 0,3 | 0x3E99999A | 0,300000011920928955078125 | nein |
| 0,5 | 0x3F000000 | 0,5 | ja |
| 1 | 0x3F800000 | 1 | ja |
| 1,5 | 0x3FC00000 | 1,5 | ja |
| 2 | 0x40000000 | 2 | ja |
| 3 | 0x40400000 | 3 | ja |
| 10 | 0x41200000 | 10 | ja |
| 100 | 0x42C80000 | 100 | ja |
| 1000 | 0x447A0000 | 1000 | ja |
| −1 | 0xBF800000 | −1 | ja |
| −42,5 | 0xC22A0000 | −42,5 | ja |
| 1/3 | 0x3EAAAAAB | 0,333333343267440795898437… | nein |
| 3,14159265358979 | 0x40490FDB | 3,1415927410125732421875 | nein |
| 16777217 | 0x4B800000 | 16777216 | nein |
Dezimalzahlen als double (binary64) in Hex
| Zahl | Hex | Gespeichert | Exakt? |
|---|---|---|---|
| 0 | 0x0000000000000000 | 0 | ja |
| 0,1 | 0x3FB999999999999A | 0,100000000000000005551115… | nein |
| 0,2 | 0x3FC999999999999A | 0,200000000000000011102230… | nein |
| 0,25 | 0x3FD0000000000000 | 0,25 | ja |
| 0,3 | 0x3FD3333333333333 | 0,299999999999999988897769… | nein |
| 0,5 | 0x3FE0000000000000 | 0,5 | ja |
| 1 | 0x3FF0000000000000 | 1 | ja |
| 1,5 | 0x3FF8000000000000 | 1,5 | ja |
| 2 | 0x4000000000000000 | 2 | ja |
| 3 | 0x4008000000000000 | 3 | ja |
| 10 | 0x4024000000000000 | 10 | ja |
| 100 | 0x4059000000000000 | 100 | ja |
| 1000 | 0x408F400000000000 | 1000 | ja |
| −1 | 0xBFF0000000000000 | −1 | ja |
| −42,5 | 0xC045400000000000 | −42,5 | ja |
| 1/3 | 0x3FD5555555555555 | 0,333333333333333314829616… | nein |
| 3,14159265358979 | 0x400921FB54442D11 | 3,14159265358979000737349… | nein |
| 16777217 | 0x4170000010000000 | 16777217 | ja |
Warum 0,1 + 0,2 nicht 0,3 ergibt (double)
| Ausdruck | Hex | Exakt gespeichert | Ausgabe |
|---|---|---|---|
| 0,1 | 0x3FB999999999999A | 0,100000000000000005551115123125… | 0,1 |
| 0,2 | 0x3FC999999999999A | 0,200000000000000011102230246251… | 0,2 |
| 0,1 + 0,2 | 0x3FD3333333333334 | 0,300000000000000044408920985006… | 0,30000000000000004 |
| 0,3 | 0x3FD3333333333333 | 0,299999999999999988897769753748… | 0,3 |
Sonderwerte in Hex: 0, −0, Unendlich, Not a Number, größte und kleinste Zahl
| Wert | half | float | double |
|---|---|---|---|
| +0 | 0x0000 | 0x00000000 | 0x0000000000000000 |
| −0 | 0x8000 | 0x80000000 | 0x8000000000000000 |
| +∞ | 0x7C00 | 0x7F800000 | 0x7FF0000000000000 |
| −∞ | 0xFC00 | 0xFF800000 | 0xFFF0000000000000 |
| Not a Number (quiet) | 0x7E00 | 0x7FC00000 | 0x7FF8000000000000 |
| 1 | 0x3C00 | 0x3F800000 | 0x3FF0000000000000 |
| größte Zahl | 0x7BFF | 0x7F7FFFFF | 0x7FEFFFFFFFFFFFFF |
| kleinste normale | 0x0400 | 0x00800000 | 0x0010000000000000 |
| kleinste subnormale | 0x0001 | 0x00000001 | 0x0000000000000001 |
Beispiele zum Ausprobieren
Häufige Fragen
Wie lautet die IEEE-754-Darstellung von 0,1 als float?
0,1 als float ist 0x3DCCCCCD. Die Bits sind 0 01111011 10011001100110011001101. Exakt gespeichert wird 0,100000001490116119384765625, obwohl die kürzeste Ausgabe 0,1 lautet. Der Wert ist also nicht exakt darstellbar, sondern gerundet.
Wie lautet 0,1 als double in IEEE 754?
0,1 als double ist 0x3FB999999999999A. Der exakt gespeicherte Wert lautet 0,1000000000000000055511151231257827021181583404541015625. Auch double speichert 0,1 nicht exakt, die Abweichung ist aber kleiner als bei float.
Was bedeutet 3F800000 als IEEE-754 float?
3F800000 als IEEE-754 float bedeutet 1. Das Bitmuster ist 0 01111111 00000000000000000000000. Das Vorzeichen-Bit ist 0, der gespeicherte Exponent ist 127 und der tatsächliche Exponent ist 0.
Was ist der Unterschied zwischen float und double?
float hat 32 Bit, double hat 64 Bit. Bei float sind 8 Exponentbits und 23 Mantissenbits vorgesehen, bei double 11 Exponentbits und 52 Mantissenbits. Double kann dadurch mehr Dezimalstellen abbilden und viele Rundungsfehler kleiner halten.
Warum ist 0,3 als double nicht exakt?
0,3 als double wird als 0x3FD3333333333333 gespeichert. Der exakte Speicherwert ist 0,299999999999999988897769753748434595763683319091796875. Die kurze Ausgabe kann trotzdem 0,3 lauten, weil die Anzeige gerundet wird.
Welche Dezimalzahlen sind in IEEE 754 exakt darstellbar?
Exakt darstellbar sind zum Beispiel 0,25, 0,5, 1,5, -2,75 und 1000 in den passenden Formaten. Nicht exakt sind zum Beispiel 0,1, 0,2, 0,3 und 1/3. Entscheidend ist, ob die Zahl binär mit der verfügbaren Mantisse endet.
Was bedeuten NaN und Infinity in IEEE 754?
Infinity steht für Unendlich, NaN für Not a Number. Als float ist +∞ 0x7F800000 und -∞ 0xFF800000. Ein quiet NaN ist im float-Format 0x7FC00000. Im double-Format ist +∞ 0x7FF0000000000000.
Wie erkenne ich den Rundungsfehler bei float?
Den Rundungsfehler erkennst du am Unterschied zwischen Eingabe und exakt gespeichertem Wert. Bei 0,1 als float steht im Speicher 0,100000001490116119384765625 statt 0,1. Der Rechner zeigt zusätzlich, ob der Wert exakt darstellbar ist oder gerundet wurde.
Quellen und Prüfung
- IEEE 754: Aufbau, Formate, Sonderwerte - Wikipedia
- What Every Computer Scientist Should Know About Floating-Point Arithmetic (Goldberg) - Oracle
- Gleitkommazahl: Rundung und Maschinengenauigkeit - Wikipedia
Diese Seite zitieren
IEEE-754-Rechner. Rechnerinfo, Stand 23.09.2026. https://rechner-info.de/technik/ieee-754-rechner

