Gleitkommazahl

Eine Gleitkommazahl (englisch floating point number, wörtlich Zahl mit gleitendem Punkt) – ist eine rationale Zahl mit weiteren einschränkenden Eigenschaften. Derartige Zahlen werden insbesondere von Computern und Taschenrechnern für Berechnungen verwendet.

Exakt darstellbare Gleitkomma­zahlen für verschiedene Mantissen­längen, Basis: 2, Exponent −3 bis 1

Gleitkommazahlen bestehen aus einer festen Anzahl von Ziffern, um den Wert der Zahl anzugeben, sowie der Angabe, um wie viele Stellen das Komma nach links oder rechts verschoben werden muss, um die Zahl in der Dezimalschreibweise zu erhalten. So beschreibt zum Beispiel die Angabe „1234 und das Komma 2 Stellen nach links“ die Zahl 12,34. Der Vorteil einer solchen Zahlendarstellung ist, dass mit einer festen Anzahl von ausgeschriebenen Ziffern ein großer Zahlenraum abgedeckt wird und die Zahlen trotzdem eine gute Genauigkeit behalten.

Ob eine gegebene rationale Zahl eine Gleitkommazahl ist, hängt nicht von der Zahl selbst ab, sondern von der gewählten Darstellungsweise. Im Laufe der Entwicklung der elektronischen Rechenmaschinen gab es in den 1950er und 1960er Jahren eine Vielzahl von verschiedenen Darstellungsformaten. Die IEEE veröffentlichte 1985 den internationalen Standard IEEE 754, in dem zwei Darstellungsformate festgelegt wurden. Die meisten der seitdem entwickelten Rechenmaschinen folgen diesem Standard.

Festkommaschreibweise

Registrierkasse mit 3 Stellen vor dem Komma und 2 Nachkommastellen

Das Rechenwerk von mechanischen und elektronischen Rechenmaschinen arbeitet mit Zahlen fester Länge. Beispiele dafür sind mechanische Registrierkassen, bei denen im Anzeigebereich eine feste Anzahl von Ziffern verbaut ist. Registrierkassen werden eingesetzt, um Geldbeträge zu addieren. In den meisten Währungen werden Geldbeträge mit zwei Nachkommastellen angegeben, und die Beträge haben insbesondere im Einzelhandel eine praktische Obergrenze, daher reicht für diesen Anwendungsfall ein Zahlenraum aus, der 3 oder 4 Stellen vor dem Komma und 2 Nachkommastellen hat. Bei allen Zahlen, die die Registrierkasse anzeigen kann, hat das Komma dieselbe Position, daher heißt die Menge der so darstellbaren Zahlen Festkommazahlen, im Beispiel der abgebildeten Registrierkasse „Festkommazahlen im Dezimalsystem ohne Vorzeichen mit 3 Stellen vor und 2 Stellen nach dem Komma“.

Exponentialschreibweise

Im naturwissenschaftlichen Bereich ist der Zahlenraum deutlich größer, bei Längenangaben reicht er vom Atomradius von Wasserstoff (etwa Meter bzw. 32 Pikometer) bis zum Lichtjahr (etwa Meter bzw. 9,46 Billionen Kilometer) und darüber hinaus. Bei so großen oder kleinen Zahlen ist die Schreibweise durch die vielen Nullen unübersichtlich, daher hat sich dort eine andere Schreibweise etabliert, bei der die Zahl in ihre signifikanten Ziffern und eine Kommaverschiebung zerlegt wird. In dieser Schreibweise sind die Zahlen und deutlich kürzer und dadurch einfacher zu erkennen. Die hochgestellte bzw. in dieser Exponentialschreibweise gibt an, um wie viele Stellen das Komma nach links bzw. nach rechts verschoben werden muss. Das Komma hat keine feste Position, sondern die Position ist beweglich, daher der Begriff Gleitkommazahl.

Wertemengen

Es gibt zahlreiche unterschiedliche Darstellungsformate für Gleitkommazahlen. Jedes Darstellungsformat definiert, welche Zahlen sich darin darstellen lassen und welche nicht. Die Unterschiede liegen in der Genauigkeit der Zahlen, dem Umfang des Zahlenraums, dem Speicherbedarf für eine einzelne Zahl und besonderen Darstellungsformen für betragsmäßig kleine Zahlen, unendlich und (aus praktischen Gründen) Elemente, die keine Zahlen sind, zum Beispiel, um fehlerhafte Rechenergebnisse zu markieren.

Ein Darstellungsformat für Gleitkommazahlen definiert anhand mehrerer Parameter, welche Zahlen in dem Format darstellbar sind:

  • Die Basis des Stellenwertsystems legt fest, wie viele unterschiedliche Ziffern verwendet werden, um die Zahlen zu schreiben.
    • Die Basis 10 mit den Ziffern 0 bis 9 sorgt für menschenfreundliche Darstellungen, zum Beispiel auf wissenschaftlichen Taschenrechnern.
    • Die Basis 2 mit den Ziffern 0 und 1 ist für elektronische Schaltungen, insbesondere Computer, ideal.
    • Alle weiteren Basen sind exotisch.
  • Die Anzahl der signifikanten Ziffern  legt fest, mit welcher Genauigkeit die darstellbaren Zahlen angegeben werden können. Die Ziffern selbst heißen Mantisse.
    • Taschenrechner zeigen üblicherweise 8 bis 10 Dezimalstellen an.
    • Die seit 1985 üblichen Darstellungsformate für Computer haben eine Genauigkeit von 24 bzw. 53 Binärstellen, das sind umgerechnet etwa 7 bzw. 15 Dezimalstellen.
  • Die feste Position des Kommas in der Mantisse.
    • Das Komma steht üblicherweise zwischen der ersten und der zweiten Stelle, die Mantisse hat also die Form .
  • Der minimale Exponent legt fest, um wie viele Stellen das Komma maximal nach links verschoben werden kann.
  • Der maximale Exponent legt fest, um wie viele Stellen das Komma maximal nach rechts verschoben werden kann.

Der Wert  einer Zahl ergibt sich nach der Formel:

.

Hierbei ist:

  • das Vorzeichen der Zahl (entweder oder ),
  • die Mantisse der Zahl,
  • die Basis des Darstellungsformats und
  • der Exponent der Zahl.

Die obigen Parameter lassen noch Zahlen zu, die mehrere gleichwertige Darstellungen haben. Um das zu umgehen, wird die Mantisse normalisiert, so dass die Ziffer vor dem Komma keine 0 ist. Durch diese Einschränkung gibt es zu jeder darstellbaren Zahl nur noch eine mögliche Schreibweise. Eine Nebenwirkung dieser Einschränkung ist jedoch, dass die Zahl 0 nicht mehr darstellbar ist, da ihre Darstellung ausschließlich aus Nullen besteht. Daher muss eine weitere Regel eingeführt werden, um die Zahl 0 darzustellen. Eine Möglichkeit ist, auf die Normalisierung zu verzichten, wenn der Exponent der Zahl gleich dem des Darstellungsformats ist. Dadurch bleibt die Eindeutigkeit bestehen, so dass es zu jeder darstellbaren Zahl genau eine mögliche Schreibweise gibt.

Beispiel

Ein mögliches Darstellungsformat für einen Taschenrechner ist:

  • Basis 10, mit den Ziffern 0 bis 9
  • 8 Stellen Genauigkeit
  • Exponenten von bis

Die Zahl mit der Darstellung hat damit den Wert oder als ganze Zahl geschrieben .

Die kleinste darstellbare Zahl in diesem Darstellungsformat ist , also 0, die größte darstellbare Zahl ist , das ist eine 100-stellige Zahl.

Geschichtliche Entwicklung

Die erste dokumentierte Verwendung der Gleitkommaschreibweise liegt etwa 2700 Jahre zurück: Im Zweistromland (Mesopotamien) wurden wissenschaftliche Rechnungen mit der Basis durchgeführt und der Exponent (eine meistens kleine ganze Zahl) einfach im Kopf mitgeführt.[1][2][3][4] Dasselbe Vorgehen war bei Berechnungen mit einem Rechenschieber üblich.

In Rechenautomaten wurde erstmals von Konrad Zuse eine eigene Gleitkommadarstellung für seine Computer Z1 und Z3 verwendet.

Das heute häufigste und bekannteste Gleitkommasystem wurde 1985 in der Norm IEEE 754 definiert und ist in den meisten CPUs in Hardware implementiert. IEEE 854 ist eine Norm für Gleitkomma-Dezimalzahlen, also Basis 10 statt Basis 2. Beide Normen wurden in der überarbeiteten Fassung IEEE 754-2008 zusammengeführt und erweitert.

Speicherformate

Bei der Verarbeitung in Computern werden Gleitkommazahlen in einem Speicherbereich fester Größe abgelegt. Die dabei verwendeten Speicherformate unterscheiden sich von der abstrakt-mathematischen Darstellung der Gleitkommazahl, zum Beispiel werden redundante Informationen weggelassen. Ein konkretes Speicherformat ist eine Abwägung: Einerseits sollen die Zahlen möglichst exakt gespeichert werden können und dabei einen großen Zahlenraum abdecken, andererseits soll der Speicherbedarf möglichst gering sein.

Der minimale Speicherbedarf ergibt sich aus den Parametern des Darstellungsformats: Um eine Gleitkommazahl aus dem Darstellungsformat mit der Basis , der Genauigkeit Binärstellen und einem Exponenten im Bereich von bis zu speichern, benötigt man:

  • für das Vorzeichen 1 Bit, da es 2 mögliche Werte hat,
  • für die Mantisse Bit, da jede Stelle der Mantisse wegen der Basis 2 genau 1 Bit Speicherplatz benötigt
  • für den Exponenten so viele Bits, dass jede ganze Zahl von bis gespeichert werden kann, also .

Bei Gleitkommazahlen mit der Basis 2 ist es möglich, beim Speichern 1 Bit einzusparen. Dazu wird festgelegt, dass die Zahlen stets in ihrer normalisierten Form gespeichert werden. Das bedeutet im allgemeinen Fall, dass die erste Ziffer der Mantisse nicht 0 sein kann, denn sonst wäre die Zahl nicht normalisiert. Da es im Binärsystem nur die Ziffern 0 und 1 gibt, muss die erste Ziffer also 1 sein. Diese Ziffer ist also bereits bekannt und muss daher nicht für jede Zahl abgespeichert werden. Dadurch ergibt sich eine Ersparnis von 1 Bit, so dass für die Mantisse nur Bit benötigt werden. Wird diese Möglichkeit genutzt, wird von einem hidden bit (engl. wörtlich „verstecktes Bit“) gesprochen.

Das Speicherformat definiert nicht nur, wie viele Bits zum Speichern einer Gleitkommazahl nötig sind, sondern auch, welche Teile der Zahl in welchem Bit gespeichert werden. Zusätzlich zu den Zahlen mit normalisierter Mantisse kann das Speicherformat auch definieren, wie unnormalisierte Zahlen gespeichert werden und ob es weitere Sonderfälle wie unendlich und NaN (engl. not a number) für ungültige Rechenergebnisse gibt.

Speicherbedarf für Gleitkommazahlen
SpeicherformatBits für VorzeichenBits für MantisseBits für ExponentGesamtAnmerkungen
IEEE 754-2008 b16110516Die Mantisse ist normalisiert; siehe Minifloat
IEEE 754 single123832Die Mantisse ist normalisiert.
IEEE 754 double1521164Die Mantisse ist normalisiert.
IEEE 754-2008 b128111215128Die Mantisse ist normalisiert.
Intel 8087 extended1641580Die Mantisse ist nicht normalisiert.
IBM S/390 single124732
IBM S/390 double156764
IBM 704 dezimal1 ? ?36Basis 10 statt 2; weitere Details stehen nicht im Handbuch
IBM 704 binär127836Die Mantisse ist nicht normalisiert.
PHP-10127836
CDC 66001 ? ?60

Rechenbeispiel

Im Format „IEEE 754 single“ ist , , und , der benötigte Speicherplatz ist daher:

  • für das Vorzeichen 1 Bit,
  • für die normalisierte Mantisse Bit,
  • für den Exponenten Bit,
  • insgesamt also 32 Bit.

Schreibweisen

  • Wissenschaftliche Notation mit konsequenter Normalisierung auf
    • Beispiel: 10000 = 1e4
  • Technische Notation mit Normalisierung auf , mit f als Potenz der Anzahl der verbleibenden signifikanten Stellen der Messunsicherheit für die Rechengenauigkeit (denormalisierte Stellen). Im Exponent erscheinen nur Vielfache von 3 – diese Darstellung lässt sich beim Rechnen mit Maßeinheiten sowohl zwanglos in die Einheitenvorsätze, als auch die Zifferngruppierung mit Tausendertrennzeichnung überführen, bzw. sich daraus erzeugen
    • Beispiel: 10.000 m = 10e3 m = 10 km
    • Signifikanz: 10.00e3 m = 10.000 ± 5 m (4 signifikante Stellen bezüglich Messung in Kilometern mit Rundung), aber 0.01e6 m = 10.000 ± 5000 m (2 signifikante Stellen bezüglich Messung in Mm) – wobei die präzisen Angaben über Standard- und erweiterte Messunsicherheit DIN 1319-3 bzw. dem ISO/BIPM-Guide (GUM, ENV 13005) folgen

In Programmiersprachen wird für die Notation von Gleitkommazahlen im Quelltext und für ihre Ein- und Ausgabe eine kompakte Variante der Exponentialschreibweise verwendet, z. B. 2.99792458e8 (= 2,997.924.58 · 108). Das e steht für „mal 10 hoch“. In der Sprache Algol 60 war dafür ein eigenes Zeichen (Basiszehn) vorgesehen, das zwar auf manchen Ein- und Ausgabegeräten damaliger Rechner vorhanden war, aber erst 2002, also nach der Verwendungszeit von Algol 60, als Unicode-Zeichen U+23E8 in einen genormten Zeichencode aufgenommen wurde.

Gleitkommaarithmetik

Beim Rechnen mit allgemeinen rationalen Zahlen (Bruchrechnung) ist das Ergebnis einer Addition, Subtraktion, Multiplikation und Division stets wieder eine rationale Zahl, mit einer einzigen Ausnahme, der Division durch 0. Diese Eigenschaft der Abgeschlossenheit fällt beim Rechnen mit Gleitkommazahlen weg, da die Menge der darstellbaren Zahlen begrenzt ist. Die Zwischenergebnisse müssen daher nach jedem Schritt gerundet werden, damit sie in das Darstellungsformat passen.

Durch dieses Runden entstehen beim Rechnen mit Gleitkommazahlen überraschende Ergebnisse. Insbesondere gelten die aus der Bruchrechnung bekannten Rechenregeln nicht mehr. In Berechnungen, bei denen keine Rundung nötig ist, garantiert IEEE 754 ein exaktes Ergebnis. In vielen anderen Fällen beziehen sich die Rundungsfehler nur auf die letzten Stellen der Mantisse und fallen daher nicht auf, insbesondere wenn das Endergebnis erneut gerundet wird, um besser lesbar zu sein. Es gibt aber auch Fälle, in denen Rundungsfehler zu komplett anderen Ergebnissen führen.

Für Computer ist das Rechnen mit Gleitkommazahlen aufwändiger als mit Ganzzahlen, da die Zahlen vor jedem Rechenschritt aneinander angeglichen werden müssen und die Zwischenergebnisse vor dem Runden viele Ziffern enthalten können. Die PCs in den 1980er Jahren hatten standardmäßig keinen Gleitkommaprozessor. Für wissenschaftliche Berechnungen gab es stattdessen Höchstleistungsrechner (number cruncher) mit speziellen Prozessoren für Gleitkommaberechnungen.

Auslöschung

Unter Auslöschung versteht man den Effekt, dass bei der Subtraktion fast gleich großer Zahlen das Ergebnis falsch wird.

Zahlen verschiedener Größenordnung (Absorption)

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

Im Beispiel der vierstelligen Dezimalarithmetik (, ) ändert die Addition von 0,001 zu 100 am größeren Operanden nichts. Dasselbe gilt für die Subtraktion:

Rechenbeispiel
TermAnmerkungen
Die Ausgangsrechnung in mathematischer Schreibweise
Die gleiche Rechnung in Gleitkommaschreibweise, kein Runden nötig
 Die Addition beginnt, ab hier wird intern mit beliebiger Genauigkeit gerechnet
Beide Operanden haben jetzt den gleichen Exponenten und die gleiche Mantissenlänge
Die Operanden werden ziffernweise addiert
Das Ergebnis der Addition wird so gerundet, dass es ins Darstellungsformat passt
 Die Addition endet, ab hier wird nicht mehr mit beliebiger Genauigkeit gerechnet
Das Ergebnis in Dezimalschreibweise; die Addition hat nichts an der 100 geändert

Unterlauf

Liegt das Ergebnis eines Rechenschritts zwischen der kleinsten darstellbaren positiven Zahl und der 0, kann es zur 0 abgerundet werden. Dieses Abrunden wird Unterlauf (engl. underflow) genannt.

Ungültigkeit der Assoziativ- und Distributivgesetze

Die Addition und die Multiplikation von Gleitkommazahlen sind nicht assoziativ, das heißt im Allgemeinen gilt:

Die Addition und Multiplikation von Gleitkommazahlen sind auch nicht distributiv, das heißt im Allgemeinen gilt:

Lösbarkeit von Gleichungen

In einer Gleitkommaarithmetik haben manche normalerweise unlösbare Gleichungen eine Lösung.

Beispiel:

Im Bereich der reellen 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 Dezimalbrüche (, ) gilt (Der Strich | markiert die beim Runden nach der Addition entfallenden Stellen):

Die kleinste positive Zahl , die zu 1 addiert werden kann und ein von 1 verschiedenes Ergebnis liefert (also ) wird Maschinengenauigkeit genannt.

Konversionen

Wenn die Basis verschieden von 10 ist, müssen die Zahlen zwischen dem vorliegenden Gleitkommasystem und dem Dezimalsystem konvertiert werden, um eine menschenlesbare Darstellung zu erhalten. Eine schon alte und wichtige Forderung an diese Konversion ist ihre bitgenaue Umkehrbarkeit: Eine Zahl, die im Gleitkommaformat vorliegt und dann im Dezimalsystem dargestellt wird, soll wieder eingelesen werden können und bitgenau dieselbe Darstellung im Gleitkommasystem reproduzieren.

In vielen Programmiersprachen (C, C++, Python) wird diese Forderung nicht beachtet, dort gibt es in der Standardbibliothek keine Routinen, die eine exakte Umwandlung garantieren. Einige andere Programmiersprachen (Java, Scheme) liefern diese Umwandlungsroutinen bereits mit und erfüllen damit diesen Satz:

Man kann zeigen, dass es nicht ausreicht, die aufgrund der Mantissengenauigkeit berechnete Anzahl der Dezimalstellen aufzurunden und diese Dezimalstellen gerundet zu produzieren. Eine einzige weitere Stelle reicht jedoch aus (Theorem 15[5]).

Dezimalbrüche

Schon einfache Dezimalbrüche wie 0,1 können nicht exakt als binäre Gleitkommazahlen dargestellt werden, da jede rationale Zahl, deren gekürzter Nenner keine Zweierpotenz ist, im Binärsystem zu einer nicht abbrechenden, periodischen Darstellung führt. Von dieser werden nur die ersten Ziffern gespeichert, wodurch Ungenauigkeit entsteht. Dezimal 0,1 ist binär 0,0001100110011… Allerdings wurde für binäre Gleitkommasysteme mit entsprechenden Rundungsregeln bewiesen, dass die Darstellung von 0,1 multipliziert mit 10 wieder exakt 1 ergibt. Allgemein gilt bei richtiger Rundung (m / 10) · 10 = m (Goldbergs Theorem 7[5] für den konkreten Fall n = 21 + 23 = 10).

In Disziplinen wie der Finanzmathematik werden oft Ergebnisse verlangt, die mit einer dezimalen Handrechnung exakt übereinstimmen. Für diesen Anwendungsbereich sind Gleitkommazahlen ungeeignet, stattdessen wird dort dezimale Festkommaarithmetik eingesetzt.

Prüfung auf Gleichheit

Die im Abschnitt Dezimalbrüche genannte Einschränkung, dass viele dieser Dezimalzahlen im Binärsystem eines Computers nicht exakt dargestellt werden können, hat beim Programmieren Auswirkungen auf Vergleiche zwischen Gleitkommazahlen.

Zum Beispiel gilt mathematisch: und . Beim Rechnen im Darstellungsformat „IEEE 754 double“ treten jedoch die folgenden Rundungsfehler auf, so dass diese Gleichungen dort nicht gelten.

Rundung von Gleitkommazahlen
DezimalzahlGleitkommazahl IEEE 754 doubleAnmerkung
abgerundet
nach dem Multiplizieren wird erneut abgerundet
aufgerundet
nach dem Dividieren wird erneut abgerundet
abgerundet

Vergleiche auf exakte Gleichheit müssen deshalb durch eine Abfrage ersetzt werden, ob die zu vergleichenden Werte im Rahmen einer erreichbaren Genauigkeit (meist Toleranz genannt) als gleich angesehen werden können.

Toleriert man beim Vergleich einen absoluten Fehler, lautet eine mögliche Formulierung .

Toleriert man beim Vergleich einen relativen Fehler, lautet eine mögliche Formulierung . Der zweite Fall muss meist noch mit der Sonderfallabfrage verbunden werden.

Versteckte Verwendung anderer Darstellungen

Manche Rechenanlagen verwenden beim Rechnen mehrere verschiedene Formate. Prozessoren, die auf dem Intel 8087 basieren, haben mehrere Gleitkommaeinheiten (traditionelle FPU, MMX, SSE), die sich in der Genauigkeit unterscheiden. Das führt zu überraschenden Ergebnissen, wenn der Programmierer nicht genau weiß, welche Rechenschritte in welchem Format durchgeführt werden. So kann es vorkommen, dass derselbe mathematische Ausdruck zu verschiedenen Ergebnissen führt, je nachdem, in welcher der Gleitkommaeinheiten die Berechnung stattfindet. Das folgende Programm berechnet zweimal den Cosinus von 0,2:

double x = 0.2; // der exakte Wert ist nicht wichtig
double cos_von_x = cos(x);

if (cos_von_x != cos(x))
    printf("paradox\n");
else
    printf("beide sind gleich\n");

Wenn das Programm die Ausgabe „paradox“ erzeugt, ist die einfachste Erklärung dafür, dass der Compiler zwei unabhängige cos-Berechnungen generiert, die eine bei der Berechnung von cos_von_x, die andere in der Zeile mit dem if. Die Variable cos_von_x enthält den Cosinus von x mit der Genauigkeit 64 Bit. Die Berechnung des zweiten cos(x) und der anschließende Vergleich mit != kann direkt im Gleitkommaprozessor erfolgen, dort kann die Genauigkeit höher sein, zum Beispiel 80 Bit beim Intel 8087 und dessen Nachfolgern. In dem Fall wird das gerundete Ergebnis im 64-Bit-Format mit dem präziseren im 80-Bit-Format verglichen, und der Vergleich ergibt, dass die Zahlen nicht gleich sind.

Siehe auch

Wiktionary: Fließkommazahl – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen
Wiktionary: Gleitkommazahl – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen

Einzelnachweise

  1. Otto Neugebauer: The exact sciences in antiquity. Princeton University Press, 1952.
  2. Bartel Leendert van der Waerden: Science awakening. P. Noordhoff, Groningen, 1954.
  3. Donald E. Knuth: Ancient Babylonian algorithms. In: Commun. ACM. 15, 1972, S. 671–677, Korr. in Commun. ACM. 19, 1976, S. 108.
  4. Donald E. Knuth: The Art of Computer Programming. Vol. 2: Seminumerical Algorithms. 3. Auflage. Addison-Wesley, 1997, S. 196.
  5. David Goldberg: What Every Computer Scientist Should Know About Floating-Point Arithmetic. In: ACM Computing Surveys. Band 23, 1991, S. 5–48, doi:10.1145/103162.103163 (sun.com [abgerufen am 2. September 2010]).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.