Privacy Policy Cookie Policy Terms and Conditions Gleitkommazahl - Wikipedia

Gleitkommazahl

aus Wikipedia, der freien Enzyklopädie

Eine Gleitkommazahl (auch Gleitpunktzahl oder Fließkommazahl als falsche Übersetzung aus engl. floating point number) ist eine approximative Darstellung einer reellen Zahl. Die Menge der Gleitkommazahlen ist eine endliche Teilmenge der rationalen Zahlen. Zusammen mit den auf ihnen definierten Operationen bilden die Gleitkommazahlen eine endliche Arithmetik, die vor allem im Hinblick auf numerische Berechnungen mit Computern entwickelt wurde.

Inhaltsverzeichnis

[Bearbeiten] Idee

Alle (mechanischen oder elektronischen) Rechenhilfsmittel von Abakus bis zum Computer verwenden als einfachste Form der Zahldarstellung Festkommazahlen. Dabei wird eine meistens begrenzte Ziffernfolge gespeichert und an festgelegter Stelle das Komma angenommen. Bei größeren Rechnungen treten unweigerlich Überläufe auf, die eine Skalierung der Werte und eine erneute Durchrechnung erforderlich machen, um Endergebnis und alle Zwischenergebnisse in den erlaubten Wertebereich zu bringen. Diese Skalierung ist zeitraubend und muss automatisiert werden.

Ein naheliegender und direkt zu Gleitkommazahlen führender Gedanke ist dabei, bei jedem Wert die genaue Stelle des Kommas zusätzlich zu speichern. Das bedeutet mathematisch nichts anderes als die Darstellung der Zahl x mit zwei Werten, der Mantisse m und dem Exponent a: x = m \cdot 10^a. Die Freiheit bei der Wahl des Exponenten kann genutzt werden, um die Mantisse in einen festgelegten Wertebereich, zum Beispiel 1 \le m < 10 zu bringen. Dieser Schritt heißt Normalisierung der Mantisse.

Beispiel: Die Lichtgeschwindigkeit im Vakuum beträgt c = 299.792.458 m/s = 299.792,458·103 m/s = 0,299.792.458·109 m/s = 2,997.924.58·108 m/s. Nur der letzte Wert ist normalisiert.

Diese Schreibweise wurde von Physikern und Mathematikern schon seit langem verwendet, um sehr große und sehr kleine Zahlen angeben zu können. Noch heute wird deshalb die Gleitkommaschreibweise auf Taschenrechnern speziell als wissenschaftliches Format (sci) bezeichnet.

Wenn man sie bei Rechnungen verwendet, geschieht im Grunde nichts anderes, als statt einer einzigen Skalierung einer ganzen Rechnung jedes Zwischenergebnis individuell zu skalieren. Diese Skalierung (Berechnung des Exponenten) jedes Zwischenergebnisses erfordert zusätzlichen Rechenaufwand und wurde deshalb bis weit in die 1980er Jahre nach Möglichkeit vermieden. So hatten die damaligen PCs nicht standardmäßig einen Gleitkommaprozessor. Und natürlich erfordert sie zusätzlichen Speicheraufwand, um bei jeder Zahl einen Exponenten zu speichern. Dieser Speicheraufwand zieht entweder erhöhten Speicherbedarf nach sich oder geht auf Kosten der Stellenzahl. Folglich hatten auch nur die Höchstleistungsrechner (number cruncher) eine Gleitkommaarithmetik oder wenigstens eine Hardwareunterstützung einer Software-Gleitkommaarithmetik.

Da die Wahl der Basis 10 willkürlich und nur historisch erklärbar ist, können Gleitkommazahlen natürlich mit beliebigen Basen dargestellt werden, im allgemeinen gilt also x = m \times b^a mit einer beliebig gewählten Basis b. Rechenanlagen verwenden b = 2 oder b = 16 (heute selten). Bei beliebiger Basis ist die Bedingung für normalisierte Zahlen natürlich 1 \le m < b.

Die erste dokumentierte Verwendung der Gleitkommaschreibweise liegt etwa 2700 Jahre zurück: Im Zweistromland wurden damals wissenschaftliche Rechnungen mit der Basis b = 60 durchgeführt und der Exponent (eine meistens kleine ganze Zahl) einfach im Kopf mitgeführt. Dasselbe Vorgehen war bis vor kurzer Zeit bei Berechnungen mit einem Rechenschieber üblich. Die Gleitkommadarstellung wurde in Rechenautomaten erstmals von Konrad Zuse für seine Computer Z1 und Z3 verwendet.

[Bearbeiten] Darstellung

Im letzten Abschnitt wurden die wesentlichsten Parameter einer Gleitkommazahl schon angedeutet. Es sind Basis b, Anzahl der Mantissenstellen p und Anzahl der Exponentenstellen r. Hinzu kommen weitere Parameter, die beim Rechnen die Rechenoperationen erleichtern sollen. In diesem Abschnitt werden Parameter und Bitfelder einer allgemeinen Gleitkommazahl kurz beschrieben.

[Bearbeiten] Basis b

2,997.924.58 * {\color{Red}10}^8

Der wichtigste Parameter ist die gewählte Basis b. Zahlen, die von Menschen direkt verarbeitet werden, verwenden entweder b = 10 oder b = 1000. In diesem speziellen Fall verwendet man für den Exponenten die Vorsätze Kilo=1, Mega=2, Giga=3, Tera=4 und milli=−1, mikro=−2, nano=−3, piko=−4 des internationalen Einheitensystems. Die Entfernungsangabe von Regensburg nach Würzburg mit 220 km kann daher auch in der Form 220,0 · 10001 m dargestellt werden.

Im Computer haben sich das Dualsystem und seine Verwandten durchgesetzt und es sind die Basen b = 2, b = 8 und b = 16 üblich. Seit der Norm für Gleitkommazahlen IEEE 754 wird in modernen Computern fast ausschließlich die Basis b = 2 verwendet.

Für die externe Schreibweise von Gleitkommazahlen im Dezimalsystem beim Computer hat sich eine Form durchgesetzt, bei der der Exponent mit dem Buchstaben e, bei einem double-Format manchmal auch mit d markiert wird.

Beispiel: Die Lichtgeschwindigkeit im Vakuum beträgt c = 2,997.924.58 · 108 m/s = 2,997.924.58e8 m/s.

[Bearbeiten] Mantisse m

{\color{Red}2,997.924.58} * 10^8

Die Mantisse ist der wesentliche Teil einer Gleitkommazahl, der die Ziffern, mit anderen Worten den Wert dieser Zahl enthält. Die Anzahl p der Mantissenziffern drückt also aus, wie exakt die Zahl approximiert wird. Dieser Gleitkommaparameter wird entweder direkt angegeben oder wird auch in Form der kleinsten Zahl ε beschrieben, die zu 1 addiert werden kann und ein von 1 verschiedenes Ergebnis liefert (1 + ε > 1;ε minimal!) (s. u. bei Eigenschaften).

Beispiel: Bei IEEE 754 Zahlen vom Typ Single mit der Basis b = 2 ist die Mantisse p = 23 Stellen lang. Hier ist ε = 1,19209289551e−0007.

[Bearbeiten] Exponent e

2,997.924.58 * 10^{\color{Red}8}

Der Exponent speichert die genaue Stelle des Kommas und damit die Größenordnung der Zahl. Die Anzahl r der Exponentenziffern beschränkt die Variationsmöglichkeiten des Kommas und beschreibt damit den Wertebereich der dargestellten Gleitkommazahlen. Um ein System von Gleitkommazahlen zu beschreiben gibt man den kleinsten und den größten möglichen Exponenten an oder auch die Anzahl der Exponenten und die Verschiebung zur 0 (Bias).

Beispiel: Bei IEEE 754 Zahlen vom Typ Single mit der Basis b = 2 ist der kleinste mögliche Exponent -126 und der größte 127. Damit ist die größte in diesem System darstellbare Gleitkommazahl max = 1{,}11111\ldots \cdot 2^{127} \approx 3{,}4 \cdot 10^{+38} und die kleinste normalisierte Gleitkommazahl minpos = 1{,}00000\ldots \cdot 2^{-126} \approx 1{,}175 \cdot 10^{-38}. Diese Größen , max = 3{,}4 \cdot 10^{+38} und minpos = 1{,}175 \cdot 10^{-38} beschreiben den zulässigen Wertebereich.

[Bearbeiten] Normalisierung

{\color{Red}2,}997.924.58 * 10^8

Die Darstellung einer Gleitkommazahl ist zunächst nicht eindeutig. Die Zahl 2 kann als 2{,}0 \cdot 10^0 oder auch 0{,}2 \cdot 10^1 geschrieben werden. Um Eindeutigkeit zu erreichen werden daher oft normalisierte Gleitkommazahlen verwendet, bei denen die Mantisse in einen definierten Bereich gebracht wird. Die beiden natürlichen Normalisierungsbedingungen sind 1/b \le m < 1 und 1 \le m < b. Die Zahl 2 würde man also bezüglich der ersten Normalisierungsbedingung als 0{,}2 \cdot 10^1 schreiben, die Darstellung 2{,}0 \cdot 10^0 wäre dann nicht erlaubt. Die Zahl 0 kann allerdings nicht normalisiert dargestellt werden. Das Rechnen mit normalisierten Zahlen ist um vieles einfacher, weshalb fast alle Implementatoren einer Gleitkommaarithmetik nur normalisierte Zahlen zulassen.

[Bearbeiten] Darstellung des Exponentenvorzeichens mit oder ohne Bias B

In Gleitkommasystemen ist der Exponent eine Zahl mit Vorzeichen. Das verlangt vom Implementierer eine zusätzliche ganzzahlige Arithmetik mit Vorzeichen für Exponentenberechnungen. Dieser zusätzliche Aufwand kann vermieden werden, wenn zum Exponenten e eine feste Zahl B, der Biaswert oder Exzess, addiert wird und statt des Exponenten e die Summe E = e + B gespeichert wird. Diese Summe ist dann eine vorzeichenfreie positive Zahl. Meistens wird die Verwendung eines Bias B mit der Darstellung der 0 durch e = 0 kombiniert.

Eine heute selten anzutreffende Alternative ist die Darstellung des Exponenten im Zweierkomplement, im Einerkomplement oder als Betrags-Vorzeichenzahl.

Der Vorteil der Biased-Darstellung besteht darin, dass auf diese Weise ein Größer/Kleiner-Vergleich zwischen zwei positiven Gleitkommazahlen erleichtert wird. Es genügt, die Ziffernfolgen em, also jeweils Exponent e gefolgt von Mantisse m, lexikografisch miteinander zu vergleichen. Eine Gleitkomma-Subtraktion mit anschließendem Vergleich auf Null wäre weitaus aufwändiger. Der Nachteil der Biased-Darstellung gegenüber der Zweierkomplement-Darstellung besteht darin, dass nach einer Addition zweier Biased-Exponenten der Bias subtrahiert werden muss, um das richtige Ergebnis zu erhalten.

IEEE verwendet die Darstellung mit B=127 bei Single und B=1023 bei Double.

[Bearbeiten] Vorzeichen der Zahl

Das Vorzeichen v einer Gleitkommazahl (+ oder −; auch +1 oder −1) kann immer in einem Bit kodiert werden. Meistens wird das Bit S = 0 für positive Zahlen (+) und das Bit S = 1 für negative Zahlen (−) verwendet. Mathematisch kann man schreiben v = ( − 1)S

[Bearbeiten] Kurzdarstellung der Parameter

In den letzten Jahren hat sich die folgende Kurzdarstellung der wesentlichen Parameter b, p, r und B eines Gleitkommasystems durchgesetzt. Dabei schreibt man durch Punkte getrennt die Größen 1, r, p, B und b in genau dieser Reihenfolge auf. Die (eigentlich selbstverständliche) 1 ist dabei die Anzahl der Vorzeichenbits. Eine IEEE 754 Single-Zahl mit 1 Vorzeichenbit, 8 Exponentenbit und 24 Mantissenbit ist also eine 1.8.24.127.2 Gleitkommazahl. Geht die Basis b und der Bias B aus dem Zusammenhang hervor, kann beides weggelassen werden und man spricht von einer 1.8.24 Gleitkommazahl (Diese Schreibweise darf natürlich nicht mit den ähnlich aussehenden IP-Adressen verwechselt werden).

Eine zweite gängige Schreibweise lässt das Vorzeichenbit weg und gibt nur Mantissenlänge und Exponentenlänge an: s24e8.

IEEE 754 Double-Zahlen sind 1.11.53.1023.2 oder kurz 1.11.53 oder s53e11 Gleitkommazahlen.

[Bearbeiten] Hidden Bit

Bei der Darstellung normalisierter Mantissen im Binärsystem kann ein Bit eingespart werden. Da die erste Stelle einer normalisierten Zahl immer ungleich 0 ist, ist diese Stelle im Binärsystem immer gleich 1. Eine Ziffer mit dem festen Wert 1 muss nicht mehr explizit gespeichert werden, da sie implizit bekannt ist. Wird diese Möglichkeit genutzt, spricht man von einem hidden bit. Das erwähnte IEEE-Format für Gleitkommazahlen macht von dieser Einsparungsmöglichkeit Gebrauch.

Allerdings erzwingt die Verwendung eines Hidden Bit die Darstellung der Null im Exponenten, da m = 0 mit hidden bit die Zahl 1.0 = 1 kodiert.

[Bearbeiten] Eigenschaften einer Gleitkommaarithmetik

Gleitkommazahlen warten besonders für den mathematischen Laien mit einigen Überraschungen auf, die auch oft das Ergebnis von Taschenrechner- und Computerrechnungen beeinflussen. Am wichtigsten sind außer Kraft gesetzte geläufige mathematische Rechenregeln. Wer intensiv mit einem Rechenhilfsmittel arbeitet, muss diese Eigenschaften kennen. Sie gehen auf die begrenzte Genauigkeit zurück, mit der Mantisse und Exponent gespeichert werden. Die Konsequenz dieser Begrenzung wird klar, wenn man sich überlegt, dass die unendlich vielen reellen Zahlen durch sehr viele, aber in jedem Fall nur noch endlich viele, Werte dargestellt werden. Man kann sich Gleitkommazahlen als lange Tabelle fester Werte vorstellen. Eine Gleitkommafunktion ordnet dann jedem Wert dieser Tabelle in ihrem Definitionsbereich einen anderen Wert dieser Tabelle zu. Analoges gilt für zwei- und mehrstellige Operationen. Im Artikel Minifloats sind diese Tabellen grafisch dargestellt.

Daraus resultiert die leichte bis absolute Ungenauigkeit der Rechnungen und die außer Kraft gesetzte Gültigkeit geläufiger mathematischer Rechenregeln.

[Bearbeiten] Zitat von Prof. W. Kahan

Schon in den vergangenen Zeiten des Rechnens mit Rechenschieber und Logarithmentafel gab es Faustregeln, um grobe Fehler im Umgang mit Gleitkommazahlen zu vermeiden. Mit dem Computer können heute Millionen bis Milliarden Operationen pro Sekunde durchgeführt werden, eine Fähigkeit, die ohne genaue Kenntnis der Numerik nicht ungestraft angewendet werden kann. Der Altmeister der Numerik W. Kahan schreibt dazu in seinem pointierten und teilweise ironischen Stil ([1]):

Nur weil sie in Lehrbüchern eingemeißelt wurden, werden alte Faustregeln aus der Zeit der Rechenschieber weiter gelehrt, während Zahlen im Computer nur ein Milliardstel der Zeit verweilen, die der menschliche Verstand benötigt, bis er merkt, dass sie nicht immer funktionieren. Genaugenommen haben sie niemals verlässlich funktioniert.


  1. Jede Rechnung mit Gleitkommazahlen ist mindestens leicht fehlerhaft.
  2. In einer Gleitkommaarithmetik repräsentiert eine Zahl die Menge aller Zahlen, die von ihr in der Stelle nach der letzten abweichen. „3“, „3.0e0“ und „3.0d0“ sind als Gleitkommazahlen verschieden (will sagen, verschiedene Mengen).
  3. Arithmetik, die genauer ist als die bearbeiteten Daten, ist nutzlos und eine Verschwendung.
  4. In einer Gleitkommaarithmetik ist nichts jemals genau 0; Falls doch, gibt es keinen Grund +0 und −0 zu unterscheiden.
  5. Auslöschung bei Subtraktionen verursacht immer numerische Ungenauigkeiten oder ist die einzige Ursache dafür.
  6. Eine Singularität vermindert die Genauigkeit, wenn die Zahlen ihr zu nahe kommen. Schlecht konditionierte Daten und Probleme verdienen nichts anderes als ungenaue Ergebnisse.
  7. Klassische Schulregeln und -formeln, auch wenn sie in Büchern stehen, müssen die Probe der Zeit bestanden, nicht nur überstanden haben.
  8. Fortschritt ist unvermeidlich; wenn bessere Formeln gefunden werden, ersetzen sie die alten.
  9. Die moderne backward analysis zur Fehlerfortpflanzung erklärt alle Fehler – oder entschuldigt sie.
  10. Als numerisch instabil bekannte Algorithmen sollten nie verwendet werden.
  11. Falsche Ergebnisse sind immer auf schlechte Daten oder schlechte Programmierer zurückzuführen, niemals auf eine schlechte Programmiersprache.
  12. Die meisten Eigenschaften des IEEE 754 sind zu obskur, um für die meisten Programmierer eine Bedeutung zu haben.
  13. „Schönheit und Wahrheit sind dasselbe. Das ist alles, was wir auf Erden wissen und wissen müssen“ aus Keats, Ode auf eine griechische Urne. Anders ausgedrückt: Über häßliche Details sollte niemand Schweiß vergießen!

[Bearbeiten] Auslöschung

Unter Auslöschung (engl. cancellation) versteht man den Effekt, dass bei der Subtraktion fast gleichgroßer Zahlen das Ergebnis falsch wird.

Beispiel:

Subtrahiert man \pi=3{,}141592653589793\ldots und die exakte Zahl 3,141 in einer vierstelligen Gleitkommaarithmetik (b = 10, p = 4) so erwartet der unbefangene Laie als korrekt gerundetes Ergebnis \pi - 3{,}141 = 0{,}000592653589793 = 5{,}927\times 10^{-4}. Tatsächlich erhält man als Ergebnis \pi - 3{,}141 = 3{,}142 - 3{,}141 = 0{,}001 = 1{,}0000 \times 10^{-3}, da schon die Ausgangsgrößen, insbesondere π in der Gleitkommaarithmetik dargestellt sind und eben nicht exakt vorliegen. Dass das Wunschergebnis 5{,}927\times 10^{-4} und das Gleitkommaergebnis 1{,}0000 \times 10^{-3} nicht sehr viel miteinander zu tun haben, kann man sofort erkennen.

[Bearbeiten] Zahlen verschiedener Größenordnung (engl.: absorption)

Die Addition bzw. Subtraktion einer betragsmäßig viel kleineren Zahl ändert die größere Zahl nicht.

Im Beispiel der vierstelligen Dezimalarithmetik (b = 10, p = 4) ändert die Addition von 1e−3 zu 1e2 am größeren Operanden nichts. Dasselbe gilt für die Subtraktion.

  • 1e2 + 1e−3 = 1e2

oder

  • 1{,}000\times 10^2 + 1{,}000\times 10^{-3} = 1{,}000\times 10^2 + 0{,}000|010\ldots \times 10^{2} = 1{,}000\times 10^2 + 0{,}000\times 10^{2} = 1{,}000\times 10^2

[Bearbeiten] Unterlauf

Da es in der Gleitkommadarstellung eine kleinste positive Zahl gibt, unterhalb derer kein Wert mehr dargestellt werden kann, wird ein Ergebnis in diesem Bereich meistens durch 0 repräsentiert. In diesem Fall spricht man von einem Unterlauf (engl. underflow). Ist das Ergebnis ein Zwischenergebnis, so wird dabei natürlich ein Wert, der verschieden von 0 ist, durch 0 ersetzt. Im Grunde ist dadurch jede Information über das Ergebnis verlorengegangen. In manchen Fällen wird die Genauigkeit des Endergebnisses davon nicht berührt, aber in anderen Fällen kann das resultierende Endergebnis auch komplett falsch sein.

[Bearbeiten] Ungültigkeit des Assoziativgesetzes

  • (x + y) + z \neq x + (y + z)
  • (x \cdot y) \cdot z \neq x \cdot (y \cdot z)

[Bearbeiten] Ungültigkeit des Distributivgesetzes

  • x \cdot (y + z) \neq (x \cdot y) + (x \cdot z)

[Bearbeiten] Lösbarkeit von Gleichungen

In einer Gleitkommaarithmetik haben manche normalerweise unlösbare Gleichungen eine Lösung. Dieser Effekt wird sogar ausgenutzt, um ein solches Gleitkommasystem zu beschreiben.

Beispiel:

Im Bereich der mathematischen (natürlichen, ganzen, rationalen, reellen oder komplexen) Zahlen hat die Gleichung (1 + x) = 1 für x > 0 keine Lösung.

In einer Gleitkommaarithmetik hat diese Gleichung viele Lösungen, nämlich alle Zahlen, die zu klein sind, um bei der Summe noch einen Effekt zu ergeben. Wieder mit dem Beispiel vierstelliger Dezimalzahlen (b = 10, p = 4) gilt (Der Strich | markiert die bei der Addition entfallenden Stellen):

  • 1 + 1e−3 = 1,000 + 0,001|000000… = 1,000 + 0,001 = 1,001 > 1
  • 1 + 1e−4 = 1,000 + 0,000|10000… = 1,000 + 0,000 = 1,000 = 1
  • 1 + 2,3e−5 = 1,000 + 0,000|023000… = 1,000 + 0,000 = 1,000 = 1

Die schon oben erwähnte kleinste Zahl ε, die zu 1 addiert werden kann und ein von 1 verschiedenes Ergebnis liefert (1 + ε > 1;ε minimal!) nennt man Maschinengenauigkeit.

[Bearbeiten] Konversionen

Wenn die Basis verschieden von 10 ist, müssen die Zahlen zwischen dem Gleitkommasystem der Anlage und dem Dezimalsystem konvertiert werden, um eine menschenlesbare Darstellung zu erhalten. Das wird meist schnell (und oft ungenau) programmiert. Eine schon alte und wichtige Forderung an diese Konversion ist ihre bitgenaue Umkehrbarkeit. Ein im Dezimalsystem dargestelltes Ergebnis soll wieder eingelesen werden können und bitgenau dieselbe Darstellung im Gleitkommasystem reproduzieren.

Diese Forderung ist einfach zu verstehen, einfach zu implementieren und wird trotzdem meist nicht beachtet. Eine rühmliche Ausnahme ist hier Java, das die nachfolgend zitierten Aussagen beachtet.

Man kann zeigen, dass es nicht ausreicht, die aufgrund der Mantissengenauigkeit berechnete Anzahl der Dezimalstellen aufzurunden und diese Dezimalstellen gerundet zu produzieren. Eine weitere Stelle reicht aber aus. (Theorem 15 in [2]) Das ist der Grund warum in der Darstellung reeller Zahlen, die von Java-Programmen produziert werden, immer eine zusätzliche und scheinbar überflüssige Stelle erscheint.

[Bearbeiten] Dezimalzahlen

Schon einfache Dezimalzahlen, z. B. 0,1, können nicht mehr exakt als binäre Gleitkommazahlen dargestellt werden, da viele im Dezimalsystem abbrechende Kommazahlen im Binärsystem nicht abbrechende, periodische Zahlen sind; von diesen werden nur die ersten p Ziffern gespeichert, wodurch Ungenauigkeit entsteht. Dezimal 0,1 ist binär 0,0001100110011… In einem binären Gleitkommasystem ist also 10 · 0,1 < 1, da die 0,1 abgerundet wird und nicht den exakten Wert approximiert.

[Bearbeiten] Finanzmathematik

Im großen und ganzen verhalten sich Gleitkommazahlen sehr ähnlich wie die mathematischen reellen Zahlen, die durch Gleitkommazahlen approximiert werden. Computernutzer sind heute bei abnehmendem Wissen über Numerik deshalb oft überrascht, wenn sich leichte oder gravierendere Diskrepanzen ergeben. Speziell in der Finanzmathematik werden oft Ergebnisse verlangt, die mit einer Handrechnung exakt übereinstimmen. Das geht nur mit einer dezimalen Gleitkommaarithmetik[1].

[Bearbeiten] IEEE 754 und andere Normen

Das heute häufigste und bekannteste Gleitkommasystem wurde 1985 von IEEE konzipiert und ist in den meisten Computern als Hardware- oder Softwarearithmetik vorhanden. Allerdings wurden manchmal nicht alle Forderungen der Norm IEEE 754 erfüllt (Java).

Strenggenommen sind nur die normalisierten Zahlen aus IEEE 754 Gleitkommazahlen. Die denormalisierten Zahlen sind eigentlich Festkommazahlen. Die Sonderfälle wurden für spezielle numerische Zwecke geschaffen.

IEEE 854 ist eine Norm für Gleitkomma-Dezimalzahlen. Beide Normen werden in der Revision IEEE 754r zusammengeführt und erweitert.

[Bearbeiten] Gleitkommazahlen in der Digitaltechnik

Die oben erwähnten Beispiele sind im Dezimalsystem angegeben, das heißt mit einer Basis b = 10. Computer verwenden stattdessen das Binärsystem mit einer Basis b = 2. Gleitkommazahlen werden in Computern normalerweise als Folgen von 32 Bit („einfache Genauigkeit“) oder 64 Bit („doppelte Genauigkeit“) dargestellt. Manche Prozessoren erlauben auch längere Gleitkommazahlen, so kennen die von der Intel x86 Serie abgeleiteten Prozessoren (u. a. Intel Pentium und AMD Athlon) eine Gleitkommazahldarstellung mit 80 Bit für Zwischenergebnisse. Manche Systeme erlauben auch Gleitkommazahlen mit 128 Bit. Einige ältere Systeme verwendeten auch noch andere Längen wie zum Beispiel 40 Bit.

Die IEEE hat die Darstellung von Gleitkommazahlen in ihrem Standard IEEE 754 reglementiert; beinahe alle modernen Prozessoren folgen diesem Standard. Ausnahmen sind einige IBM-Großrechnersysteme, die VAX-Architektur und einige Supercomputer, etwa von Cray sowie die Java Virtual Machine mit den Java-Typen float und double sowie den zugehörigen Wrapper-Klassen Float und Double. (vgl. hierzu zum Beispiel die Darstellung von William Kahan unter http://www.cs.berkeley.edu/~wkahan/JAVAhurt.pdf.)

Die tatsächliche Darstellung im Computer besteht also aus einem Vorzeichen-Bit, einigen Mantissen-Bits und einigen Exponenten-Bits. Wobei die Mantisse meistens normiert ist und Zahlen im Intervall [1; 2[ darstellt. (Da in diesem Intervall das erste Bit mit der Wertigkeit Eins stets gesetzt ist, wird es meistens implizit angenommen und nicht gespeichert.) Der Exponent wird meistens im Biased-Format, oder auch im Zweierkomplement dargestellt. Des Weiteren werden zur Darstellung besonderer Werte (Null, Unendlich, Keine Zahl) meistens einige Exponentenwerte, zum Beispiel der größtmögliche und der kleinstmögliche Exponent, reserviert.

Eine Zahl f wird demzufolge als f = s · m · 2e dargestellt, wobei s Element von {−1, 1} ist.

IEEE 754 S/390
Mantisse (in Bit) Exponent (in Bit) Mantisse (in Bit) Exponent (in Bit)
Single 23 8 24 7
Double 52 11 56 7
Extended 64 15 112 7

Durch die unterschiedliche binäre Darstellung der Zahlen kann es in beiden Systemen zu Artefakten kommen, das heißt, Zahlen die im Dezimalsystem „rund“ erscheinen, zum Beispiel als 12,45 ausgegeben werden, können im Binärsystem nicht exakt dargestellt werden. Statt dessen wird ihre Binärdarstellung abgeschnitten, so dass bei der Rückumwandlung ins Dezimalsystem der Wert 12,44999999900468785 erhalten wird. Dieses kann in nachfolgenden Berechnungen zu unvorhergesehenen Ab- oder Aufrundungsfehlern führen.

Die oben erwähnten Artefakte sind im Binärsystem unvermeidlich, da viele Zahlen, die im Dezimalsystem exakt dargestellt werden können, im Binärsystem periodische Zahlen mit unendlich vielen Nachkommastellen sind. Sie könnten nur durch die Verwendung von BCD-kodierten Festkommazahlen vermieden werden. Binäre Gleitkommazahlen werden jedoch nach wie vor aus verschiedenen Gründen eingesetzt.

[Bearbeiten] Gleitkommazahlen in der Mathematik

In der Mathematik ist eine Gleitkommazahl ein Tupel \left(d, [e_{\rm min}, e_{\rm max}], l \right), wobei d die Basis, \left[ e_{\rm min}, e_{\rm max} \right] den Bereich des Exponenten und l die Länge der Mantisse darstellt.

Damit ist eine reelle Zahl x ≠ 0 darstellbar durch ein a und ein e, so dass: a = \sum_{i=1}^l a_i \cdot d^{-i} und x = ade mit e\in \left[e_{\rm min}, e_{\rm max} \right].

Hiermit ist eine mathematische Betrachtung des Rundungsfehlers möglich. Die obige Darstellung realisiert eine Projektion

fl\colon\mathbb{R}\to \{x \in \mathbb{R}\mid\exists a, e\colon x = a d^e\}

und damit ist der Rundungsfehler definiert als

\frac{|x - fl(x)|}{|x|} \le \epsilon := \frac{1}{2} d^{1-l}.

Bei double-Werten entspricht ε gerade 2 − 53 (ungefähr 1{,}1 \cdot 10^{-16}).

[Bearbeiten] Berechnung einer IEEE single precision Gleitkommazahl (32-Bit-Gleitkommazahl)

Hier werden die genauen Rechenschritte vorgestellt, um eine Dezimalzahl in eine binäre Gleitkommazahl vom Typ Single nach IEEE 754 umzuwandeln. Dazu müssen nacheinander die drei Werte (Vorzeichen v (1 bit), Mantisse m und Exponent e) berechnet werden, aus denen sich die Zahl x zusammensetzt:

x = (-1)^v \cdot m \cdot 2^e

Vorzeichen

Je nachdem, ob die Zahl positiv oder negativ ist, ist das Vorzeichen v +1 oder −1. Ein positives Vorzeichen wird mit einem Vorzeichenbit 0 gespeichert, negative Zahlen werden durch eine 1 im Vorzeichenbit gekennzeichnet.

Alle weiteren Berechnungen erfolgen mit dem Betrag der Zahl.

Exponent

Als nächstes wird der Exponent gespeichert. Beim IEEE single-Datentyp sind dafür 8 Bit vorgesehen. Der Exponent muss so gewählt werden, dass die Mantisse einen Wert zwischen 1 und 2 erhält:

e = \left \lfloor \log_2(|x|) \right \rfloor

Wenn hierbei ein Wert für den Exponenten heraus kommt, der kleiner −126 oder größer 127 ist, kann die Zahl mit diesem Datentyp nicht gespeichert werden. Statt dessen wird die Zahl als 0 (Null) oder als „unendlich“ abgespeichert.

Der Wert für den Exponenten wird jedoch nicht direkt gespeichert, sondern um einen Bias-Wert erhöht, um negative Werte zu vermeiden. Bei IEEE single ist der Bias-Wert 127. Somit werden die Exponentenwerte −126…+127 als so genannte „Charakteristik“ zwischen 1…254 gespeichert. Die Werte 0 und 255 als Charakteristik sind reserviert für die speziellen Zahlenwerte „Null“, „Unendlich“ und „NaN“.

Mantisse

Die Mantisse wird nun in den verbleibenden 23 Bit abgespeichert:

m = \left( \frac{x}{2^e} - 1 \right) \cdot 2^{23}

Zahlenbeispiel mit der Zahl 11,25

Zahl = +11,25

Vorzeichen = + -> 0binär

\mathrm{Exponent} = \left \lfloor \log_2(11{,}25) \right \rfloor = \left \lfloor 3{,}49 \right \rfloor = 3 --> 3 + 127 = 130 -> 10000010binär

\mathrm{Mantisse} = \left( \frac{11{,}25}{2^3} - 1 \right) \cdot 2^{23} = (1{,}40625 - 1) \cdot 2^{23} = 3407872 -> 01101000000000000000000binär

Damit ergibt sich folgende Gleitkommazahl einfacher Genauigkeit:

0 10000010 01101000000000000000000

Umkehrung

Will man aus einer Gleitkommazahl im Maschinenwort eine Dezimalzahl errechnen so kann man dieses mit folgender Formel recht schnell erledigen:

Z=(-1)^{VZ}\cdot(1{,}0+M/2^{23})\cdot 2^{E - 127}

[Bearbeiten] Siehe auch

[Bearbeiten] Quellen

  1. IBM Corporation: General Decimal Arithmetic

[Bearbeiten] Weblinks

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu