Eine Gleitkommazahl (auch Gleitpunktzahl oder Fließkommazahl; engl. floating point number) ist eine approximative Darstellung einer reellen Zahl. Die Menge der Gleitkommazahlen ist eine endliche Teilmenge der rationalen Zahlen, erweitert um einige Spezialelemente (+Unendlich, −Unendlich, NaN (=„Not A Number“), −0, usw. siehe unten). 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.
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 bedeuted mathematisch nichts anderes als die Darstellung der Zahl mit zwei Werten, der Mantisse und dem Exponent : . Die Freiheit bei der Wahl des Exponenten kann genutzt werden, um die Mantisse in einen festgelegten Wertebereich, z. B. 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 mit einer beliebig gewählten Basis . Rechenanlagen verwenden oder (heute selten). Bei beliebiger Basis ist die Bedingung für normalisierte Zahlen natürlich .
Die erste dokumentierte Verwendung der Gleitkommaschreibweise liegt etwa 2700 Jahre zurück: Im Zweistromland wurden damals wissenschaftliche Rechnungen mit der Basis 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.
Im Computer haben sich das Dualsystem und seine Verwandten durchgesetzt und es sind die Basen , und üblich. Seit der Norm für Gleitkommazahlen IEEE 754 wird in modernen Computern fast ausschließlich die Basis 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.
Beispiel: Bei IEEE 754 Zahlen vom Typ Single mit der Basis ist die Mantisse Stellen lang. Hier ist 1.19209289551e−0007.
Beispiel: Bei IEEE 754 Zahlen vom Typ Single mit der Basis ist der Exponent Stellen lang. Sein Wert liegt zwischen −126 und 127. Damit ist max = 3.40282366921e+0038 und minpos = 1.17549435082e−0038. Beide Größen beschreiben den zulässigen Wertebereich.
In der IEEE 754 Norm wurde die zweite gewählt.
Mögliche Lösungen sind:
Die erste der beiden Lösungen ist natürlicher. Da aber oft die Anzahl der Mantissenstellen weit größer als die Anzahl der Exponentenstellen ist, ist die zweite Lösung technisch einfacher umzusetzen.
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.
Eine zweite gängige Schreibweise lässt das Vorzeichenbit weg und gibt nur Mantissenlänge und Exponentenlänge an: s24e8.
Allerdings erzwingt die Verwendung eines Hidden Bit die Darstellung der Null im Exponenten, da mit hidden bit die Zahl 1.0 = 1 kodiert.
Alle Eigenschaften gehen auf die begrenzte Genauigkeit zurück, mit der die Mantisse gespeichert wird. Auch dem mathematischen Laien wird die Konsequenz dieser Begrenzung meistens sofort klar, wenn er sich überlegt, dass die unendlich vielen reellen Zahlen nur noch durch zwar sehr viele (etwa 10^20) aber in jedem Fall nur noch durch endlich viele Werte dargestellt werden. Wer schon weiß, dass es sogar mehr als abzählbar unendlich viele reelle Zahlen gibt, kann diese "brutale" Beschränkung auf endlich viele Werte noch besser einstufen. Strenggenommen bilden Gleitkommazahlen lediglich eine lange Tabelle fester Werte. Eine Gleitkommafunktion ist (genauso wie eine klassische Logarithmentafel) also lediglich eine Tabelle fester Funktionswerte mit begrenzter (z. B. 15) Stellenzahl, die zu Argumenten ebenfalls mit begrenzter Stellenzahl angegeben werden. Analoges gilt für zwei- und mehrstellige Operationen.
Daraus resultiert die leichte bis absolute Ungenauigkeit der Rechnungen und die außer Kraft gesetzte Gültigkeit geläufiger mathematischer Rechenregeln.
Beispiel:
Subtrahiert man und die exakte Zahl 3,141 in einer vierstelligen Gleitkommaarithmetik (, ) so erwartet der unbefangene Laie als korrekt gerundetes Ergebnis . Tatsächlich erhält man als Ergebnis , da schon die Ausgangsgrößen, insbesondere in der Gleitkommaarithmetik dargestellt sind und eben nicht exakt vorliegen. Dass das Wunschergebnis und das Gleitkommaergebnis nicht sehr viel miteinander zu tun haben, kann man sofort erkennen.
Faustregel: Subtrahiert man zwei fast gleichgroße Zahlen, die in den ersten Stellen übereinstimmen, so gehen im Ergebnis von den eigentlich möglichen Stellen verloren. Er sind also nur noch Stellen vertrauenswürdig.
Anwendung: Liegen aus einer physikalischen Messung vierstellige Messwerte vor und tritt in einer Rechnung, die diese Messwerte verwendet, eine einzige Auslöschung mit auf, so ist das Rechenergebnis reine Phantasie!
Differentialrechnung: Numeriker differenzieren experimentell gewonnene Funktionswerte genau aus diesem Grund nur sehr ungern, da gerade beim Differenzieren die Differenz fast gleichgroßer Werte benötigt wird. Da die Geschwindigkeit die Ableitung des Weges als Funktion der Zeit ist, tritt dieser Fall bei den elektronischen Fahrradtachometern auf. Hier wird der Umfang des Rades meistens in cm einmalig eingegeben und hat eine Genauigkeit von Stellen (Beispiel: 214 cm). Die verwendete Uhr wird meistens auch nur mit etwa 4 Dezimalstellen in die Rechnung eingesetzt. Die Geschwindigkeit kann also bestenfalls eine Genauigkeit von 1,5 Stellen haben. Die meistens angezeigten 3 Stellen (24,7 km/h) sind also nicht alle korrekt.
Im Beispiel der vierstelligen Dezimalarithmetik (, ) ändert die Addition von 1e-3 zu 1e2 am größeren Operanden nichts. Dasselbe gilt für die Subtraktion.
oder
Summen und Differenzen sollten beginnend mit dem betragskleinsten bis zum betragsgrößten Summanden berechnet werden.
Beispiel:
Im Bereich der mathematischen (natürlichen, ganzen, rationalen, reellen oder komplexen) Zahlen hat die Gleichung für 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 (, ) gilt (Der Strich | markiert die bei der Addition entfallenden Stellen):
Die schon oben erwähnte kleinste Zahl , die zu 1 addiert werden kann und ein von 1 verschiedenes Ergebnis liefert ( minimal!) beschreibt basisunabhängig die Anzahl der Mantissenstellen eines Gleitkommasystems.
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 schlampig) 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 *) 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.
Schon einfach 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 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.
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. siehe: http://www2.hursley.ibm.com/decimal/ (englisch)
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.
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 z. B. 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
Eine Zahl f wird demzufolge als f = s · m · 2e dargestellt, wobei s Element von {−1, 1} ist.
- align="center" | IEEE 754 | S/390 | - align="center" | Mantisse (in Bit) | Exponent (in Bit) | Mantisse (in Bit) | Exponent (in Bit) | - align="center" | Single | 23 | 8 | 24 | 7 | - align="center" | Double | 52 | 11 | 56 | 7 | - align="center" | 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, z. B. 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.
Damit ist eine reelle Zahl x ≠ 0 darstellbar durch ein a und ein e, so dass: und mit .
Hiermit ist eine mathematische Betrachtung des Rundungsfehlers möglich. Die obige Darstellung realisiert eine Projektion
Bei double-Werten entspricht gerade (ungefähr ).
Vorzeichen
Je nachdem, ob die Zahl positiv oder negativ ist, ist das Vorzeichen +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:
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:
Zahlenbeispiel mit der Zahl 11,25
Zahl = +11,25
Vorzeichen = + -> 0binär
--> 3 + 127 = 130 -> 10000010binär
-> 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:
Floating point | Coma flotante | Liukuluku | Virgule flottante | נקודה צפה | Virgola mobile | 浮動小数点数 | 부동소수점 | Real (informatica) | Liczba zmiennoprzecinkowa | Vírgula flutuante | Pohyblivá desatinná čiarka | Flyttal | 浮点数
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Gleitkommazahl".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world