|
Der Standard IEEE-754 von 1985 (letzte Version 2008) beschreibt u.a. das interne
Speicherformat für die Darstellung von Gleitkomma-Zahlen. Der Standard ist identisch mit IEC 60559:1989. |
Hier werden Grundlagen gezeigt, sowie die Live-Codierung und Decodierung nach IEEE-754. Alle Angaben ohne Gewähr ! |
Standards
|
Chancen ohne Monopole - Zahlen |
| Gleitkomma-Typen | Typen von Gleitkomma-Zahlen: Float, Single, Double, ... |
| Grundlagen | Mantisse, Exponent und Speicherbreite - Grundlagen von IEEE-754 |
| Demo | Live-Demonstration der Codierung und Decodierung auf BitLevel Ebene |
| Test | Live-Demo von Genauigkeit und Werte-Bereich |
| Programmierung | IEEE-754 Codierung und Decodierung in Programmiersprachen |
| Links |
Ausgewählte
|
Typen von Gleitkomma-Zahlen |
|
| In der PC-Urzeit stand nur wenig Speicher zur Verfügung und die "Wortbreite" war mit 8 Bit = 1 Byte vergleichsweise klein. | Das Kunststück bestand darin, mit möglichst wenig Speicher-Bits sowohl einen großen Zahlenbereich als auch hohe Genauigkeit zu bieten. |
Single Precision:Gleitkomma-Zahlen wurden zunächst im Format "Single Precision" mit 32 Bit = 4 Byte Breite verarbeitet und gespeichert. 'Single' entspricht dem CORBA Standard Float● Codierung und Decodierung in diesem Format wird auf der → Demo-Seite Live gezeigt. Dieser Typ ist zwar veraltet, aber übersichtlicher als die genauso arbeitenden Algorithmen für 64 oder 128 Bit. • Die Genauigkeit beträgt mit der 23+1 Bit Mantisse nur ca. 7.2 Dezimalstellen. Der 7+1 Bit Exponent bietet einen Werte-Bereich von ca. 1E-38.5 bis 1E+38.5 |
Double Precision:Alle gängigen PC und Programme verwenden vorwiegend das Format 'Double Precision' mit 64 Bit = 8 Byte Breite und bieten damit einen weiteren Zahlenbereich und höhere Genauigkeit. 'Double' entspricht dem gleichnamigen CORBA Standard.Dieses Format wird hier nicht live demonstriert, der Algorithmus verläuft jedoch genau analog zum Typ 'Single', mit dem sie Live experimentieren können. • Die Genauigkeirt beträgt mit der 52+1 Bit Mantisse ca. 16.0 Dezimalstellen. Der 10+1 Bit Exponent bietet einen Werte-Bereich von ca. 1E-308.3 bis 1E+308.3 |
Single Extended:Dieses Format verlangt exotische >=43 Bit Speicherplatz und erreichte keine praktische Bedeutung. Vielleicht wäre das mit 40 Bit (5 Byte) besser gelungen.• Die Genauigkeirt betr%ägt mit der 31+1 Bit Mantisse ca. 9.6 Dezimalstellen. Der 10+1 Bit Exponent bietet einen Werte-Bereich von ca. 1E-308.3 bis 1E+308.3 |
Double Extended:Dieses Format mit >=79 Bit Speicherplatz (in der Praxis 80 Bit = 10 Byte) wurde zuerst von fortschrittlichen Prozessoren (PowerPC, SPARC) unterstützt, später auch von Intel. Es ist für Neu-Entwicklungen wichtig.• Die Genauigkeirt beträgt mit der 63+1 Bit Mantisse ca. 19.3 Dezimalstellen. Der 14+1 Bit Exponent bietet einen Werte-Bereich von ca. 1E-4932 bis 1E+4932 |
Quadruple Precision (128):Ist mit 128 Bit Speicherplatz kein IEEE-Standard-Format, wird jedoch von einigen Herstellern bereits eingesetzt. Es kommt der Architektur moderner PC besser entgegen als 'Double Extended'.'Quadruple' scheint nicht genau dem CORBA-Standard 'Long Double' (128 Bit) oder der Type 'Float128' zu entsprechen. Die hochgenauen Typen (Double extended, Quadruple, Long Double, Float128) scheinen jedoch weitgehend miteinander kompatibel zu sein. • Die Genauigkeirt beträgt mit der 112+1 Bit Mantisse ca. 34.0 Dezimalstellen. Der 14+1 Bit Exponent bietet einen Werte-Bereich von ca. 1E-4932 bis 1E+4932 |
Number CruncherSpezialisierte Computer (z.B. die legendäre Cray-1) verwenden eigene Technologien mit besonders langen Worten. Das ermöglicht höhere Genauigkeit und einen größeren Werte-Bereich.Moderne Programmiersprachen (z.B. → Perl) bieten diesen Luxus auch für gewöhnliche PC. In eigenen Modulen werden Funktionen angeboten, die mit fast beliebiger Genauigkeit rechnen können. Das erfolgt allerdings auf Kosten der stark reduzierten Geschwindigkeit. |
Auf der Seite → Grundlagen
finden sie u.a. Darstellung und Vergleich dieser und anderer Methoden und deren Grenzen. |
Auf der → Demo-Seite
können sie Live mit Codierung und Decodierung von (Single-Precision)
Gleitkomma-Zahlen auf BitLevel-Ebene experimentierenn. |
|
Der Standard IEEE-754 beschreibt nicht nur die Codierung und Decodierung,
sondern auch die Rechen-Vorschriften und die Sonderfälle. Die praktische Ausführung erfolgt je nach System durch Hardware (Arithmetic Coprozessor), Betriebssystem, Software oder eine Kombination davon. |
Zu hoher Bekanntheit brachte es 1995 der Chip-Hersteller Intel mit einem fehlerhaften Coprozessor-Chip. Der Fehler wurde zunächst glatt geleugnet, später verharmlost - eine gewisse Parallele zu politischen Fehlern. Zuletzt musste Intel trotzdem eine teure (ca. 480 Mio$) Rückruf-Aktion starten. |
|
Alle modernen
→ Programmiersprachen bieten und Datenbanken Gleitkomma-Zahlen als Variablen-Typen an.
Mit Hilfe eigener Programme kann man Zahlen in binären Dateien speichern und analysieren. ► Normalerweise ist es nicht nötig, Programme zur Codierung / Decodierung zu erstellen, da alle modernen Programmiersprachen dazu Funktionen bieten. Sie können jedoch bei Bedarf das auf der → Demo-Seite gezeigte Muster als Vorlage verwenden. |
►
Wenn sie auf die einzelnen Bits einer codierten Gleitkommazahl zugreifen wollen,
dann bieten dazu einige Programmiersprachen (z.B. C++) die Möglichkeit, die
gleiche Adresse unter verschiedenen
Variablen-Typen anzusprechen - einmal als Gleitkommazahl, zusätzlich als Byte. ► Mit Hex-Editor Programmen kann man binäre Dateien analysieren, die Gleitkommazahlen enthalten: Mit etwas Geschick findet man darin die nach IEEE-754 codierten Gleitkomma-Zahlen. |
IEEE-754 Codierung und Decodierung |
|
Perl:Die klassischen Funktionen → pack() und unpack() |
PHP:Die Funktionen pack() und unpack() wurden dem Perl-Beispiel nachgebaut, sind bei PHP-EntwicklerInnen jedoch noch wenig bekannt.♦ Live-Demo auf der Seite File-IO mit PHP. |
|
|
Homepagedes IEEE-754 Standards bei der IEEEQueens College (NY) - IEEE-754 References und Live-Demo Pittsburgh Supercomputing Center - The IEEE standard Microsoft - IEEE Standard 754 Floating Point Numbers Sun: Floating-Point Arithmetic (David Goldberg, en) - sehr detailliert. Intel: Floating Point Operations (en) |
Wikipedia: Die englischen Beiträge sind meist wesentlich besser ! -
IEEE-754
(de,
en),
Single (de,
en),
Double (de,
en),
Quad (de,
en)
University of Utah - Floating-point test software Iowa State University - Quick summary of IEEE 754 Notation: TU Berlin - Zahlenformate (PDF, de) Christopher Vickery (Babbage): IEEE-754 Reference, Live-Codierung Centre Charles Hermite: IEEE-Arithmetic (en). Steve Hollasch: IEEE Standard 754 floating point(en) |
|
Programmierung: PerlMonks: Pack/Unpack Tutorial (Perl) Uni Halle: IEEE-Gleitkomma / Pascal (de) Borland: Converting IEEE-Format (C++, en) |
Die Web-Suche nach Funktionen und Algorithmen ist nicht ganz einfach, da die meisten Treffer daneben gehen. Am besten haben sich jene Stichworte bewährt, die mit dem Lesen und Schreiben binärer Dateien zu tun haben. |