Wikipedia · einfach zusammengefasst · Stand
Gleitkommazahl
Gleitkommazahlen bestehen aus einer festen Anzahl von Ziffern, die gemäß dem Stellenwertsystem den Wert der Zahl angeben, sowie der Angabe, um wie viele Stellen …
Inhalt6 Abschnitte
Grundidee und Schreibweisen
Eine Gleitkommazahl ist eine Zahldarstellung für sehr große und sehr kleine Zahlen. Sie besteht aus einer Mantisse, also den signifikanten Ziffern, und einem Exponenten, der die Größenordnung beziehungsweise die Verschiebung des Kommas angibt. Ihr Wert lautet
w:=v·m·b^e,
wobei v das Vorzeichen (+1 oder −1), m die Mantisse, b die Basis und e der Exponent ist. Anders als bei Festkommazahlen ist die Kommaposition nicht fest. Ob eine rationale Zahl als Gleitkommazahl darstellbar ist, hängt deshalb vom gewählten Format ab, nicht von der Zahl allein.
Festkommaschreibweise eignet sich für begrenzte Wertebereiche wie Geldbeträge: Bei einer Registrierkasse mit 3 Stellen vor und 2 nach dem Komma ist die Position des Kommas für alle Zahlen gleich. Damit können Werte exakt gespeichert werden; die Genauigkeit ist absolut.
In der Exponentialschreibweise werden signifikante Ziffern und Kommaverschiebung getrennt angegeben. Beispielsweise entsprechen 1,7·10^−15 und 8,8·10^26 dem Durchmesser eines Protons von etwa 1,7 Femtometer beziehungsweise dem Durchmesser des Universums von etwa 880 Trilliarden Kilometern. Die relative Genauigkeit hängt dabei von der Zahl der signifikanten Stellen ab. Wissenschaftliche Notation normalisiert auf 1≤m<10, etwa 10000 = 1e^4. In technischer Notation sind Exponenten Vielfache von 3, etwa 10.000 m = 10e^3 m = 10 km. In Programmiersprachen bedeutet beispielsweise 2.99792458e8: „mal 10 hoch 8“.
Die dokumentierte Verwendung einer solchen Schreibweise reicht bis 1750 v. Chr. in Mesopotamien zurück, dort mit Basis 60. Konrad Zuse verwendete sie 1937 in Z1 und Z3. Die Norm IEEE 754 von 1985 etablierte die heute verbreiteten Computerformate; IEEE 754-2008 fasste sie mit der Dezimalnorm IEEE 854 zusammen.
Darstellbare Werte und Normalisierung
Ein Gleitkommaformat legt die Basis b, die Zahl p der signifikanten Ziffern, die feste Kommaposition innerhalb der Mantisse sowie minimalen und maximalen Exponenten e_min und e_max fest. Basis 10 mit den Ziffern 0 bis 9 ist für Menschen gut lesbar, Basis 2 mit 0 und 1 eignet sich für elektronische Schaltungen. Übliche Taschenrechner zeigen 8 bis 10 Dezimalstellen; die seit 1985 gebräuchlichen Computerformate besitzen 24 beziehungsweise 53 Binärstellen, also etwa 7 beziehungsweise 15 Dezimalstellen.
Meist wird die Mantisse normalisiert: Die Ziffer vor dem Komma darf nicht 0 sein. Dadurch hat jede darstellbare Zahl nur eine Schreibweise. Die Zahl 0 wäre dann jedoch nicht darstellbar; eine Möglichkeit ist, beim Exponenten e_min von der Normalisierung abzuweichen.
Ein Taschenrechnerformat kann Basis 10, eine Mantisse mit 10 Stellen und Exponenten von −99 bis +99 haben. Für v=+1, m=9,4607305 und e=15 ergibt sich 9,4607305·10^15 = 9 460 730 500 000 000. Die kleinste betragsmäßige Zahl ist 0,0000000·10^−99, also 0; die größte ist 9,9999999·10^99, eine 100-stellige Zahl.
Speicherformate
Im Computer belegt eine Gleitkommazahl einen Speicherbereich fester Größe. Ein Format muss zwischen Genauigkeit, Wertebereich und Speicherbedarf abwägen. Für Basis b=2, p Binärstellen und Exponenten von e_min bis e_max werden 1 Bit für das Vorzeichen, p Bit für die Mantisse und ⌈log_2(1+e_max−e_min)⌉ Bit für den Exponenten benötigt.
Bei normalisierten Binärzahlen ist die erste Mantissenziffer zwingend 1. Sie muss nicht gespeichert werden; dieses hidden bit spart 1 Bit, sodass p−1 Mantissenbits genügen. Speicherformate können außerdem unnormalisierte Zahlen, unendlich und NaN („not a number“) für ungültige Ergebnisse festlegen.
Wichtige IEEE-754-Formate sind binary16 mit insgesamt 16 Bit und 10 Mantissen- sowie 5 Exponentenbits, binary32 mit 32 Bit, 23 Mantissen- und 8 Exponentenbits, binary64 mit 64 Bit, 52 Mantissen- und 11 Exponentenbits sowie binary128 mit 128 Bit, 112 Mantissen- und 15 Exponentenbits. binary32 heißt umgangssprachlich einfache, binary64 doppelte und binary128 vierfache Genauigkeit.
Für IEEE 754 binary32 gilt b=2, p=24, e_min=−126 und e_max=127. Es werden 1 Vorzeichenbit, 24−1=23 Mantissenbits und ⌈log_2(1+127−(−126))⌉=⌈log_2 254⌉=log_2 256=8 Exponentenbits benötigt: insgesamt 32 Bit oder 4 Byte.
Rundung und typische Rechenfehler
Bei rationalen Zahlen bleiben Addition, Subtraktion, Multiplikation und Division – außer Division durch 0 – im Bereich der rationalen Zahlen. Bei Gleitkommazahlen ist die Menge darstellbarer Werte begrenzt. Daher muss jedes Zwischenergebnis in das Format gerundet werden. IEEE 754 garantiert ein exaktes Ergebnis, wenn keine Rundung nötig ist. Ansonsten können Rundungsfehler die letzten Mantissenstellen betreffen, in manchen Fällen aber zu wesentlich anderen Ergebnissen führen.
Bei Auslöschung wird das Ergebnis einer Subtraktion fast gleich großer Zahlen falsch. Bei Absorption verändert eine sehr viel kleinere Zahl die größere bei Addition oder Subtraktion nicht. In einer vierstelligen Dezimalarithmetik (b=10, p=4) wird 100+0,001 zunächst zu 1,00001·10^2 und nach dem Runden wieder zu 1,000·10^2=100. Ein Unterlauf liegt vor, wenn ein Ergebnis zwischen der kleinsten positiven darstellbaren Zahl und 0 zu 0 abgerundet wird.
Addition und Multiplikation sind weder assoziativ noch distributiv: (x+y)+z muss nicht x+(y+z) entsprechen, (x·y)·z nicht x·(y·z), und x·(y+z) nicht (x·y)+(x·z). Dadurch können Gleichungen andere Lösungsmengen erhalten. In vierstelliger Dezimal-Gleitkommaarithmetik hat 1+x=1 nicht nur x=0 als Lösung, sondern je nach Rundungsregel mindestens alle −0,00005<x<0,0005 und höchstens alle −0,001<x<0,001. Die Gleichung 2+x^2=8, die reell die Lösungen x=±√6 hat, besitzt dort keine Lösung: Für 2,449 ergibt sich 7,998<8, für 2,450 ergibt sich 8,002>8.
Dezimalwerte, Umwandlung und Vergleiche
Viele Dezimalbrüche sind im binären System nicht exakt darstellbar. Eine rationale Zahl hat binär eine nicht abbrechende periodische Darstellung, wenn ihr gekürzter Nenner keine Zweierpotenz ist. So lautet 0,1 binär 0,0001100110011…; gespeichert werden nur die ersten p Ziffern. Für korrekt gerundete binäre Gleitkommasysteme gilt dennoch (m / 10) · 10 = m; insbesondere ergibt die Darstellung von 0,1 multipliziert mit 10 exakt 1. Für Finanzmathematik, in der dezimale Handrechnungen exakt übereinstimmen sollen, sind Gleitkommazahlen ungeeignet; dort wird dezimale Festkommaarithmetik verwendet.
Bei Basis ungleich 10 müssen Werte für die lesbare Ausgabe konvertiert werden. Wichtig ist bitgenaue Umkehrbarkeit: Ein ausgegebener Dezimalwert soll nach erneutem Einlesen wieder genau dieselbe Gleitkommadarstellung erzeugen. Laut Artikel bieten C, C++ und Python in ihren Standardbibliotheken keine Routinen mit dieser exakten Garantie, Java und Scheme dagegen schon.
Exakte Gleichheitsvergleiche sind wegen Rundung oft ungeeignet. In IEEE 754 double ist 0,362 als 0,36199999999999998845368054389837197959423065185546875 gespeichert; 0,362·100 und 36,2 werden unterschiedlich gerundet. Statt x=y wird deshalb häufig eine Toleranz ε verwendet: bei absolutem Fehler |x−y|≤ε, bei relativem Fehler |1−y/x|≤ε, üblicherweise ergänzt durch x≠0.
Interne Formate
CPUs, Compiler und Bibliotheken können mehrere Gleitkommaformate verwenden. Intel 8087 und Motorola 68881 unterstützen beispielsweise ein internes Format mit 64 Bit unnormalisierter Mantisse; es ist genauer als IEEE 754 binary64 mit 53 Bit normalisierter Mantisse. Beim Umwandeln in das kleinere Format gehen durch Rundung die letzten Mantissenstellen verloren. Ob Zwischenergebnisse im internen oder externen Format gespeichert werden, kann daher dazu führen, dass selbst identische Ausdrücke wie cos(0,2) unterschiedliche Ergebnisse liefern.
Lernvideos zu Gleitkommazahl
6:16
Gleitkommadarstellung, Gleitkommazahlen, Binärgleitkommazahlen in der Digitaltechnik
Mathe by Daniel Jung · 450.310 Aufrufe
12:33
IEEE 754 - Fließkommazahlen/Gleitkommazahlen
nerdwest · 132.040 Aufrufe
5:00
Was ist die Gleitkommadarstellung? Wie sind Zahlen als Gleitkommazahlen darzustellen?
lernflix · 25.001 Aufrufe
5:54
Informatik | Gleitkommazahlen IEEE 754
Wambo · 5.773 Aufrufe