[ < ] [ globale Übersicht ] [ Kapitelübersicht ] [ Stichwortsuche ] [ > ]


5.7.2 Implementierung arithmetischer Algorithmen

Autor: Martin Biribauer

Die Implementierung eines arithmetischen Algorithmus in Form eines Programms auf einem Computer mit Gleitpunktarithmetik ist normalerweise nicht äquivalent mit dem ihm zugrundeliegenden "exakten Algorithmus", der auf der Grundlage der reellen Zahlen und der zugehörigen arithmetischen Operationen entwickelt wurde, die man auf einem Computer nicht implementieren kann.

Selbst wenn die Daten Maschinenzahlen sind, ist ein implementierter arithmetischer Algorithmus im allgemeinen nicht äquivalent mit dem zugehörigen exakten Algorithmus. Der Grund liegt in der Nicht-Abgeschlossenheit von F bezüglich der exakten arithmetischen Operationen. Diese liefern nur in trivialen Sonderfällen für die Endresultate und alle Zwischenergebnisse wieder Zahlen aus der zugrundeliegenden Gleitpunkt-Zahlenmenge F.

Bei der Übertragung des in einer Programmiersprache formulierten Algorithmus in ein Objektprogramm müssen die arithmetischen Operationen durch die zu dem ausgewählten Maschinenzahlenbereich F gehörigen Pseudooperationen ersetzt werden (Kulisch, Miranker[271]). Der Objektcode realisiert also einen anderen Algorithmus als der Quellcode und damit auch eine andere mathematische Abbildung von den Daten in die Ergebnisse.

Es ist von fundamentaler Bedeutung für die Numerische Datenverarbeitttung, zu erfassen, wie sich die implementierte Abbildung von der "exakten" (d.h. der eigentlich im Bereich der reellen Zahlen beabsichtigten) Abbildung unterscheidet. Insbesondere ist es wichtig, zu erkennen, von welchen Eigenheiten eines Algorithmus, den man auch als Maschinenalgorithmus bezeichnet, erheblich oder nur geringfügig von denen des exakten Algorithmus unterscheiden.

Die Implementierungen äquivalenter arithmetischer Algorithmen liefern nämlich im allmgemeinen verschiedene Maschinenalgorithmen , die infolgedessen auch verschiedene Ergebnisse generieren,, weil sie ja unterschiedliche Zuordnungen zwischen Daten und Ergebnissen in F darstellen. Dabei kann es sein, daß sich die Ergebnisse von Implementierungen äquivalenter Algorithmen bezüglich ihrer Nähe zu den exakten Ergebnissen ganz wesentlich unterscheiden. Es ist dann ganz und gar nicht gleichgültig, welchen der äquivalenten Algorithmen man zur Lösung einer Aufgabe implementiert.

(S.219)

Beispiel (Quadratische Gleichung): Die Lösungen y1 und y2 der quadratischen Gleichung

y2 + a1y + a0 = 0

sollen berechnet werden. Mit der Formel

berechnet man zunächst y1 und kann dann y2 entweder als

y2:=-a1-y1

oder als

y2:=a0/y1

bestimmen. Die beiden arithmetisch Algorithmen unterscheiden sich nur im letzten Schritt:

    Algorithmus QG-1

    Algorithmus QG-2

    z1:=a1*a1

    z1:=a1*a1

    z2:=4*a0

    z2:=4*a0

    z3:=z1-z2

    z3:=z1-z2

    z4:=z3

    z4:=z3

    z5:=z4-a1

    z5:=z4-a1

    y1:=z5/2

    y1:=z5/2

y2:=-a1-y2 y2:=a0/y1

Wegen y1+y2=-a1 und y1*y2=a0 (nach dem, Wurzelsatz von Vieta) sind beide Algorithmen zur Berechnung von y2 natürlich äquivalent.

Die Implementierung der Algorithmen QG-1 und QG-2 soll nun in der Gleitpunktarithmetik zum Zahlenbereich F(10,4,-9,9,true) mit optimaler Rundung (zur nächstgelegenen Maschinenzahl) untersucht werden. Ausgangspunkt sind die in F liegenden Daten a1=-.5000*101 und a0=-.1000*100. Das exakte Ergebnis für diese Daten ist

y1=5.01992... , y2=-0.01199206...

Wie man leicht sieht, weichen die Zwischenergebnisse z1, z2 und z3 im Maschinenalgorithmus nicht von den exakten Zwischenergebnissen ab, weil diese in F liegen. Erst bei

z4=25.4=5.03984...

ergibt sich in der Implementierung

z4=.5040*101

und ohne weiteren Rundungsfehler

z5=.1004*102 und y1=.5020*101

Dann erhält man jedoch mit

QG-1: 2 = -.2000 * 10-1

QG-2: 2= -.1992 * 10-1

Obwohl y1=y1 ist, also optimale Genauigkeit besitzt, erhält man 2=y2 nur mit dem Algorithmus QG-2, während sich bei QG-1 2 und y2 beträchtlich (um ca. 0.4%) unterscheiden. Es wird sich herausstellen, dass kein Zufall ist.

(S.220)