Für wen soll die Seite passen? Alles hier ist kostenlos.

Kostenlos für Ihren Unterricht: Arbeitsblätter, Aufgaben, Texte und Grafiken ohne Rückfrage kopieren, anpassen und an die Klasse weitergeben (Bedingungen).

Im Unterricht ohne Werbung: Unterrichtsansicht Mehr für Lehrkräfte

Mathematik lernen · Studium

Numerik-Grundlagen: Gleitkommazahlen, Rundungs­fehler und Kondition

Ein Rechner kennt nur endlich viele Zahlen. Du lernst, wie Gleitkommazahlen aufgebaut sind, warum 0,1 + 0,2 nicht 0,3 ist, wann Auslöschung Ergebnisse zerstört und wie die Konditionszahl misst, wie empfindlich ein Problem auf Fehler reagiert.

In der Mathematik gibt es unendlich viele reelle Zahlen. Ein Computer hat nur endlich viel Speicher und rechnet deshalb mit Gleitkommazahlen, die nur ein winziger Ausschnitt der reellen Zahlen sind. Jede Rechnung rundet, und jede Rundung macht einen kleinen Fehler. Die Numerik fragt, wie diese Fehler wachsen, wann ein Ergebnis trotzdem verlässlich ist und wie man Verfahren so baut, dass sich Fehler nicht aufschaukeln. Das beginnt mit zwei Fragen: Wie genau kann man überhaupt rechnen, und wie empfindlich ist die gestellte Aufgabe selbst?

Diese Seite führt in die Grundbegriffe ein: Zahlendarstellung, Rundungsfehler, Auslöschung und Kondition. Sie ist die Grundlage für die weiteren Seiten zur Numerik: Newton-Verfahren, Numerische Lineare Algebra und Interpolation und Quadratur. Die Beispiele sind in Standard-Gleitkommaarithmetik (doppelte Genauigkeit) nachgerechnet.

Gleitkommazahlen

Eine Gleitkommazahl hat die Form x=±m·2e mit einer Mantisse m und einem Exponenten e. Wie bei der wissenschaftlichen Schreibweise 2,998·108 „gleitet“ das Komma mit dem Exponenten. Bei der doppelten Genauigkeit (binary64, Standard IEEE 754) gehören zu jeder Zahl 64 Bit: 1 Bit Vorzeichen, 11 Bit Exponent und 52 Bit Mantisse. Weil die Mantisse normalisiert mit führender Eins beginnt, die nicht gespeichert wird („hidden bit“), hat sie effektiv 53 Bit. Das entspricht etwa 15 bis 16 Dezimalstellen. Die größte Zahl ist etwa 1,8·10308, die kleinste positive normalisierte etwa 2,2·10−308.

Wichtig ist der relative Abstand der Zahlen: Zwischen 2e und 2e+1 liegen genau 252 Zahlen im gleichen Abstand 2e−52, der relative Abstand schwankt zwischen 2−53 und 2−52. Wird eine reelle Zahl x zur nächsten Gleitkommazahl fl(x) gerundet, ist der Fehler höchstens ein halber Abstand, also

|fl(x)−x||x|≤u=2−53≈1,1·10−16.

Die Zahl u heißt Rundungseinheit, die doppelte Zahl 2−52 Maschinenepsilon: der Abstand von 1 zur nächsten größeren Gleitkommazahl.

Für die Grundrechenarten gilt das Standardmodell: Das gerundete Ergebnis ist das exakte Ergebnis mit einem kleinen relativen Fehler, fl(a∘b)=(a∘b)(1+δ) mit |δ|≤u für ∘∈{+,−,·,/}. Daraus folgen Rechenregeln, die in der reellen Mathematik gelten, im Rechner aber nicht: Das Assoziativgesetz ist verletzt, (a+b)+c≠a+(b+c). Die Summe großer und kleiner Zahlen zeigt Absorption: Wegen 253=9007199254740992≈9·1015 ist für Zahlen über 253 der Abstand benachbarter Gleitkommazahlen mindestens 2. Deshalb liefert (1016+1)−1016 im Rechner den Wert 0 statt 1, das Plus eins geht verloren.

Fehler und Fehlerfortpflanzung

Ist x~ eine Näherung für x, heißt |x~−x| der absolute Fehler und |x~−x||x| der relative Fehler. Das relative Maß ist meist das richtige, denn ein Fehler von einem Millimeter ist bei einem Haus winzig, bei einer Schraube nicht.

Für einfache Rechnungen addieren sich die Fehler nach festen Regeln. Bei Summen und Differenzen addieren sich im ungünstigsten Fall die absoluten Fehler. Bei Produkten und Quotienten addieren sich näherungsweise die relativen Fehler: Ist x auf 1 Prozent und y auf 2 Prozent genau, so ist xy auf etwa 3 Prozent genau. Bei Potenzen xn wird der relative Fehler mit n multipliziert. Die allgemeine Regel liefert die Ableitung: Δf≈f′(x)Δx.

Anzeige

Auslöschung

Die gefährlichste Operation ist die Subtraktion zweier fast gleicher Zahlen. Die führenden Stellen heben sich auf, übrig bleiben die hinteren, in denen die Rundungsfehler stecken.

Beweis. Es ist (a~−b~)−(a−b)=aεa−bεb, und der Betrag ist höchstens (|a|+|b|)ε. Division durch |a−b| liefert die Behauptung.

Je näher a und b beieinander liegen, desto größer ist der Faktor |a|+|b||a−b|. Man sagt, die Subtraktion ist dort schlecht konditioniert.

Kondition eines Problems

Auslöschung ist ein Sonderfall eines allgemeinen Phänomens: Manche Aufgaben reagieren von Natur aus stark auf kleine Änderungen der Eingabe, egal wie geschickt man rechnet. Das misst die Konditionszahl.

Die Herleitung ist der Mittelwertsatz: f(x~)−f(x)≈f′(x)·xε, geteilt durch f(x). Die Konditionszahl ist also das Verhältnis der relativen Änderung der Ausgabe zur relativen Änderung der Eingabe.

Konditionszahlen einiger Funktionen
Aufgabe f(x)κf(x)Bewertung
xnngut für kleines n
x12sehr gut, der Fehler halbiert sich
ex|x|gut für kleine |x|, schlecht für große
ln⁡x1|ln⁡x|schlecht nahe x=1 (bei 1,01 etwa 100)
11−x|x1−x|schlecht nahe x=1 (bei 0,999 etwa 999)
a−b (in a)|a||a−b|schlecht bei a≈b

Kondition und Stabilität unterscheiden. Die Kondition hängt nur von der Aufgabe ab. Ein gut konditioniertes Problem kann trotzdem durch einen schlechten Algorithmus verdorben werden: x+1−x ist als Funktion von x gut konditioniert (κ≈12), aber die direkte Auswertung ist instabil, weil sie in zwei Schritte mit Auslöschung zerlegt. Die erweiterte Form ist stabil. Umgekehrt kann kein Algorithmus ein schlecht konditioniertes Problem verbessern.

Anzeige

Kondition einer Matrix

Beim Lösen von Ax=b stört man die rechte Seite b (Messfehler, Rundung). Wie stark ändert sich x?

Beweis. Aus A(x~−x)=Δb folgt x~−x=A−1Δb und ‖x~−x‖≤‖A−1‖‖Δb‖. Aus b=Ax folgt ‖b‖≤‖A‖‖x‖, also 1‖x‖≤‖A‖‖b‖. Multipliziert man beide Ungleichungen, ergibt sich die Behauptung.

Es gilt immer κ(A)≥1. Die Zahl κ(A) ist der Verstärkungsfaktor für relative Fehler im Worst Case. Als Faustregel verliert man beim Lösen etwa log⁡10κ(A) Dezimalstellen an Genauigkeit.

Berüchtigt sind die Hilbert-Matrizen Hn=(1i+j−1)i,j=1n, deren Kondition exponentiell mit n wächst. Schon für n=10 ist κ etwa 1013, in doppelter Genauigkeit bleiben von 16 Stellen nur drei übrig. Wie man Systeme trotzdem zuverlässig löst, zeigt die Seite Numerische Lineare Algebra.

Regeln für numerisches Rechnen

  • Keine Gleichheitsvergleiche von Gleitkommazahlen, sondern Toleranzen.
  • Auslöschung vermeiden: Terme umformen (Erweitern, Trigonometrische Identitäten, Vieta), bevor man subtrahiert.
  • Summieren von klein nach groß, damit kleine Summanden nicht absorbiert werden, oder mit der Kahan-Summation, die den Rundungsfehler mitführt.
  • Polynome mit dem Horner-Schema auswerten: weniger Rechenschritte und weniger Rundungsfehler.
  • Matrizen nicht invertieren, um Ax=b zu lösen, sondern zerlegen und Systeme lösen. Die Inverse ist teurer und ungenauer.
  • Kondition prüfen: Ist κ sehr groß, helfen weder mehr Rechnen noch ein anderer Algorithmus. Dann muss man die Aufgabe anders stellen oder genauer messen.
Anzeige

Typische Fehler

Übungen

Geschichte: vom Zweistromland zu IEEE 754

Gleitkommaschreibweisen sind alt: Schon im Zweistromland rechnete man um 1750 v. Chr. mit einer Art Gleitkomma, indem man nur die Ziffernfolge schrieb und die Größenordnung im Kopf behielt (siehe Sumerische und babylonische Mathematik). Konrad Zuse baute zwischen 1936 und 1938 den Rechner Z1, der mit binären Gleitkommazahlen rechnete. Fertig war er 1938. Danach hatte fast jeder Hersteller sein eigenes Format, und Programme gaben auf verschiedenen Rechnern verschiedene Ergebnisse. Erst der Standard IEEE 754 von 1985 legte Formate und Rundungsregeln einheitlich fest und wurde 2008 überarbeitet. Die Analyse der Rundungsfehler als eigene Wissenschaft begann in den 1940er-Jahren: John von Neumann und Goldstine untersuchten 1947 das Invertieren großer Matrizen, und Alan Turing beschrieb 1948 das Gaußsche Verfahren als LU-Zerlegung und führte die Konditionszahl einer Matrix ein.

Häufige Fragen

Warum rechnet man nicht einfach mit mehr Stellen?

Mehr Stellen helfen gegen Rundungsfehler, kosten aber Zeit und Speicher und ändern nichts an der Kondition der Aufgabe. Für Finanzrechnungen nimmt man deshalb Dezimalarithmetik, für Wissenschaft doppelte Genauigkeit und für schlecht konditionierte Fälle gezielt höhere Genauigkeit.

Was ist Unterlauf und Überlauf?

Ein Ergebnis kleiner als die kleinste darstellbare Zahl wird 0 (Unterlauf), ein zu großes wird unendlich (Überlauf). Beides ist ein Hinweis, die Rechnung umzuformen, etwa mit Logarithmen.

Wie groß darf die Konditionszahl sein?

Für die Rechenpraxis gilt: Bei κ(A)≈10k gehen etwa k Dezimalstellen verloren. In doppelter Genauigkeit sind also Matrizen bis etwa 1010 unproblematisch, bei 1016 ist das Ergebnis wertlos.

Quellen und weiterführende Literatur

  • Wikipedia: Gleitkommazahl
  • Wikipedia: Kondition
  • Nicholas J. Higham: Accuracy and Stability of Numerical Algorithms, SIAM, Philadelphia.
  • Peter Deuflhard, Andreas Hohmann: Numerische Mathematik 1, De Gruyter, Berlin.
  • Josef Stoer, Roland Bulirsch: Numerische Mathematik 1, Springer, Berlin.
  • United States General Accounting Office: Patriot Missile Defense: Software Problem Led to System Failure at Dhahran, Saudi Arabia, GAO/IMTEC-92-26, 1992.
Anzeige

Fehler entdeckt oder einen Wunsch? Schreib uns eine kurze Nachricht, wir kümmern uns darum.

Fehler entdeckt oder einen Wunsch?

Deine Nachricht zur Seite „Numerik-Grundlagen: Gleitkommazahlen, Rundungsfehler und Kondition“. Die Adresse der Seite schicken wir automatisch mit.

Bitte schreib keine weiteren persönlichen Daten hinein. Mehr dazu im Datenschutz.