IEEE-754 Demonstration

Live Codierung und Decodierung von Gleitkomma-Zahlen

Der Standard IEEE-754 beschreibt das interne Speicherformat für die Darstellung von Gleitkomma-Zahlen, sowie Rechnungen, Sonderfälle usw. Diese Seite demonstriert die Codierung und Decodierung von Gleitkomma-Zahlen.
Alle Angaben ohne Gewähr !
IEEE-754 Das Standardformat für Gleitkomma-Zahlen
Grundlagen Mantisse, Exponent und Speicherbreite
Live-Codierung und Decodierung von Gleitkomma-Zahlen:
Codierung
Codierung Dezimal -> Binär
Decodierung
Decodierung Binär -> Dezimal
Sonderfälle
Zero, Infinity, Underflow, Overflow, NaN, ...
Fehler
Codier-Rest und Fehler
Verwandte Themen Bitlevel-Operatoren

Codierung einer Gleitkomma-Zahl nach IEEE-754

Hier wird die Umwandlung am Beispiel einer "Single Precision" Zahl mit 32 Bit (4 Byte) Speicherbreite demonstriert.
Die Grundlagen des Verfahrens werden auf der Seite '→ Mathematische Grundlagen' beschrieben.
Codierung aus Vorzeichen (1 Bit), → Exponent (8 Bit) und → Mantisse (23 Bit).
Die Codierung von 'Double' (1+11+52 -> 64 Bit) und 'Quad' Zahlen (1+15+112 -> 128 Bit) funktioniert nach dem gleichen Verfahren, verwendet lediglich mehr Speicher-Bits.
Eingabe
Geben sie rechts eine Testzahl z ein oder klicken sie die Taste für eine Zufallszahl.
 
Testzahl
   
z(dec) = 0
Vorzeichen
0 für Null und positive Zahlen, 1 für negative Zahlen.

Vorzeichen (1 Bit) = 0
Exponent
Exponent = int( ln(z) / ln(2) )
Wert des Exponenten = 2^Exponent
Codierung im → 2er-Komplement
Binär-Code (8 Bit) des Exponenten

Exponent(dec) = 0
ExponentWert(dec) = 0
Exponent + 127 = 0
Exponent = 00000000
Mantisse
Mantisse = Zahl / Exponent-Wert
Binär-Code der Mantisse (24 Bit)
abzügl. führendes → Hidden Bit; (23. Bit)

Mantisse (dec) = 0
Mantisse   = 1.000000
- Hidden Bit = 00000000
Zusammensetzung
IEEE-754 = Vorzeichen + Exponent + Mantisse
Der gleiche Code (32 Bit) in Byte-Gruppen
und in Hexdezimal-Code

0 00000000 00000000000000000000000
00000000 00000000 00000000 00000000
00 00 00 00
Speicherform
In den meisten Betriebssystemen werden Worte aus >1 Bytes in umgekehrter Reihenfolge ('Little Endian') gespeichert.

00 00 00 00

Decodierung

Eingabe der Speicherform
Geben sie rechts einen 4-Byte Hex-Code ein oder klicken sie die Taste für Zufallscode bzw. den oberhalb erstellten Code.
   
Testcode (Speicherform) und
Umkehrung (höchste Ziffer MSB links)
00 00 00 00
00 00 00 00
Binärcode und
Aufspaltung in Vorzeichen + Exponent + Mantisse
00000000
00000000
Mantisse (roh) und
mit regeneriertem Hidden Bit
Mantisse (dec)
  00000000
1.000000
0
Exponent
decodiert im 2er-Komplement,
Exponent (dec)
ExponentWert (2^Exponent)
00000000
0
0
0
Vorzeichen (binär) und
Dezimal (+/-1)
0
0
Decodierte Zahl
   
0

Sonderfälle

Einige Sonderfälle werden durch ein spezielles Bitmuster ausgewiesen. Alle BitMuster werden mit dem richtigen Stellenwert gezeigt (höchstes Byte MSB links). Klicken sie die Tasten, um den jeweiligen Sonderfall bei der Live ↑ Codierung und Decodierung zu testen.
Zero - Zahl ist Null oder kleiner als die kleinste darstellbare positive Zahl (Positive Underflow)
00 00 00 00
Negative Underflow - Zahl ist negativ und kleiner als die kleinste darstellbare positive Zahl.
80 00 00 00
+Infinity - Zahl ist positiv und ihr Betrag größer als die größte darstellbare Zahl (d.h. Exponenten-overflow)
7F 80 00 00
-Infinity - Zahl ist negativ und ihr Betrag größer als die größte darstellbare Zahl (d.h. Exponenten-overflow)
FF 80 00 00
NaN - keine Zahl (Not a Number). Es gibt mehrere Codes für verschiedene Varianten von NaN. NaN wird hier nicht Live demonstriert (Kein Button)
7F 80 00 01, 7F BF FF FF, 7F C0 00 00,
7F FF FF FF, FF 80 00 01, FF BF FF FF,
FF C0 00 01, FF FF FF FF
Größte darstellbare Zahl - kein Sonderfall, aber eine Grenze der Codierung
7F 7F FF FF
FF 7F FF FF
Kleinste darstellbare Zahl - kein Sonderfall, aber eine Grenze der Codierung
00 00 00 01
80 00 00 01

Codier-Rest und Fehler

Nicht jede Zahl lässt sich durch eine binäre Mantisse (mit endlicher Länge) darstellen. Bei der Codierung mancher Dezimalzahlen kann ein kleiner Rest bleiben - kleiner als oder gleich groß wie der Zahlenwert des letzten Mantissen-Bits.

Beispiel:
Die Dezimalzahl 1/3 lässt sich im Dezimalsystem ebenso wie im Binärsystem mit endlich vielen Ziffern nur annähern:
0.3 -> 0.33 -> 0.333 -> 0.3333 usw.
Mit zunehmender "Speicherbreite" steigt die Genauigkeit.
Der Codier-Rest tritt in der Mantisse auf, daher handelt es sich um einen relativen Fehler - er ist proportional zum Betrag der Zahl.

Nach Mulitplikation mit dem jeweiligen Exponenten-Wert erhält man den absoluten Fehler.

Der Fehler lässt sich in der Praxis noch etwas verkleinern, wenn die Mantisse vor der Codierung auf die Anzahl codierbarer Bits gerundet wird (hier nicht ausgeführt).
Rest bei ↑ Codierung der Testzahl (Live):
Fehler = Rest * Exponent-Wert
In ↑ Sonderfällen keine Aussage über Rest und Fehler !
Durchschnittlicher Rest ohne Rundung = 2^(-24)
Durchschnittlicher Rest mit Rundung = 2^(-25)
Rest = 0
Fehler = 0

Restor = 6E-08
Restmr = 3E-08