Eingebaute Fehler: William Kahan und die Fließkommazahlen

BLOG: Heidelberg Laureate Forum

Laureates of mathematics and computer science meet the next generation
Heidelberg Laureate Forum

Computer. Wir wissen alle, dass da drin letztlich Nullen und Einsen manipuliert werden, und zwar nur endlich viele. Damit gibt es ein grundlegendes Missverhältnis zwischen den reellen Zahlen, die ja nun typischer Weise einen unabkürzbar unendlichen Schwanz von Nachkommastellen haben, und dem Umstand, dass ein Computer nur endlich viele dieser Nachkommastellen speichern kann.

Normalerweise ignorieren wir Benutzer das. Irgendein kluger Kopf hat in unseren Computer das Rechnen mit Nachkommastellen eingebaut, und, hej, meist sind da drin doch sowieso mehr Nachkommastellen, als wir für die angestrebte Genauigkeit unserer Rechnungen brauchen, oder? Wird schon alles stimmen.

Aber das, so sagt uns William Kahan, der als einer der Laureaten hier zum HLF in Heidelberg weilt, ist grundfalsch. Und weil er so etwas wie der “Vater der Fließkommazahlen” ist und die entsprechenden Spezifikationen mitentwickelt hat (1, 2, 3) empfiehlt es sich nicht, seine Einwände einfach so abzutun.

Benjamin Hiller hat in einem früheren Beitrag in diesem Blog ja schon auf Die Probleme mit den Rundungen hingewiesen. Aber die Probleme mit der Implementierung von Fließkommazahlen sind, Kahans Beispielen nach, noch deutlich abstruser als dort geschildert.

Machen wir ein Experiment, das eine ganze Reihe der Leser auf ihren eigenen Computern nachvollziehen können sollten. Man braucht dazu lediglich Microsoft Excel.

Folgen wir den Anweisungen, die uns Kahan in diesen Vortragsfolien gibt (nämlich auf S. 3):

Benutze Excel, um V = 4/3 zu berechnen.

Setze die Anzeigegenauigkeit (Formatieren -> Zelle oder so ähnlich) auf ungefähr 20 Nachkommastellen. Am besten in wissenschaftlicher Schreibweise.

Das Ergebnis ist bei mir 1.33333333333333000E+00, mit anderen Worten: 14 Nachkommastellen die drei, danach Nullen. (Ein ideales Programm würde hier unendlich viele Dreier-Nachkommastellen zeigen.)

Das ist, könnte man meinen, die Genauigkeit der Fließkommarechnung: 14 Nachkommastellen.

Abwarten.

Jetzt berechnen wir W=V-1.

Moment mal: 3.33333333333333000E-01.

3.33333333333333000E-01

Wo ist die zusätzliche 3 hergekommen? Die war vorher eine Null.

Dass ich die erste 1 entfernt habe, hat – was denn nun? Die Genauigkeit verändert? Eine Null in eine Drei verzaubert? Den üblichen Rechenregeln entspricht das nicht. Kahan spricht vom “kosmetischen Runden”.

Weiter. Berechnen wir X = W*3.

Dabei kommt 1.000000000000000E+00 heraus.

Ähem.

Sollte das nicht, gegeben die Genauigkeit der vorangehenden Beispiele, 9.99999999999999000E-01 sein?

Nehmen wir mal die Eins am Anfang weg, Y = X-1:

0.0000000000000000E+00.

Offenbar sind alle Neunen tatsächlich verschwunden.

Um sicherzugehen können wir diese Zahl mit einer großen Zahl multiplizieren, Z = Y*252:

0.00000000000000000E+00.

Verschwunden. Eindeutig.

Mit anderen Worten

(4/3 – 1)*3 – 1 = 0.00000000000000000E+00.

Außer das… jetzt kommt die Überraschung. Wir klammern den Ausdruck auf der linken Seite einfach mal ein.

Dann kommt heraus, ta-taa:
((4/3 – 1)*3 – 1) = -2.22044604925031000000E-16.

Allerdings nicht, wenn wir dieses Ergebnis wieder mit 252 malnehmen, denn dann wird es plötzlich zu

((4/3 – 1)*3 – 1)*2^52 = -1.00000000000000000000E+00.

Zitat Kahan: “Excel’s arithmetic is weird.” Unter der Haube geht zumindest hier etwas durchaus merkwürdiges vor.

Hier ist die Beispiel-Tabellenkalkulation, mit der ich diese Beispiele nachgerechnet habe (mit Excel for Mac 2008, version 12.1.0.).

Bleibt immer noch die Frage: Ist das mehr als eine Spielerei?

Kahan sagt: ja. Wenn alles so geht wie geplant, kann ich ihn am Dienstag dazu interviewen. Dann will ich ihm vor allem zu den konkreten Auswirkungen und, ja, Gefahren auf den Zahn fühlen. Und weil er in punkto Fließkommagenauigkeit so etwas wie ein Rufer in der Wüste zu sein scheint auch dazu, wie man diejenigen, die die Entscheidungen treffen, dazu bringt, in so einer Frage umzudenken.

Markus Pössel

Markus Pössel hatte bereits während des Physikstudiums an der Universität Hamburg gemerkt: Die Herausforderung, physikalische Themen so aufzuarbeiten und darzustellen, dass sie auch für Nichtphysiker verständlich werden, war für ihn mindestens ebenso interessant wie die eigentliche Forschungsarbeit. Nach seiner Promotion am Max-Planck-Institut für Gravitationsphysik (Albert-Einstein-Institut) in Potsdam blieb er dem Institut als "Outreach scientist" erhalten, war während des Einsteinjahres 2005 an verschiedenen Ausstellungsprojekten beteiligt und schuf das Webportal Einstein Online. Ende 2007 wechselte er für ein Jahr zum World Science Festival in New York. Seit Anfang 2009 ist er wissenschaftlicher Mitarbeiter am Max-Planck-Institut für Astronomie in Heidelberg, wo er das Haus der Astronomie leitet, ein Zentrum für astronomische Öffentlichkeits- und Bildungsarbeit. Pössel bloggt, ist Autor/Koautor mehrerer Bücher, und schreibt regelmäßig für die Zeitschrift Sterne und Weltraum.

1 comment

Leave a Reply


E-Mail-Benachrichtigung bei weiteren Kommentaren.
-- Auch möglich: Abo ohne Kommentar. +