Kapitel 1 Fehler in numerischen Rechnungen Analyse numerischer Rechnungen: - Welche möglichen Fehler? - Einfluss auf Endergebnis? - Nicht alles in der Comp.Phys./Numerical Analysis dreht sich um Fehler - aber beim Programmieren schon, Bugs. etc... 1.1 Beispiele Ariane 5 Explosion Juni, 1996 aufgrund Softwarefehlers, 64 bit Floating Point = 16 bit Integer = Zahl größer als 32,767 Patriot Missile Failure Golfkrieg, Februar 1991, Zeitberechnung in 24 bit Register,.34 sec falsch 1 km daneben 28 Tote, 100 Verletzte Mars Lander Mariner 1 Fortran Loop: DO 5 K=1.3 anstatt DO 5 K=1,3 Der Rechner initialisiert Variable namens DO5K mit 1.3 Problem: Blanks, keine Deklaration notwendig, kein end do ROSAT Röntgen Satellit (MPE Garching) 1997, Rundungsfehler unfortunate combination Pointing ungenau 1.2 Arten der Fehler Unterscheide 3 Arten von Fehlern: i) Fehler in Anfangsdaten, initial data error idealisierte Annahmen (Vereinfachungen) ungenaue Messdaten Kopierfehler (von Zahlen) genäherte Darstellung von Konstanten (wie π oder e) 1
2 KAPITEL 1. FEHLER IN NUMERISCHEN RECHNUNGEN ii) Abschneidefehler, truncation error Charakteristisch für benutzte Methode (Algorithmus): liegt in der Hand des Programmierers z.b. bei approximativen mathematischen Techniken, Diskrete Modellierung Bspl.: MacLaurin Serie e x = 1 + x + x 2 /2 +... + x n /n! +... Berechnung einer Zahl die e β approximiert: e β = 1 + β + β 2 /2 +... + β k /k! + E E ist der Abschneidefehler. Ursache: endliche Zahl von Iterationen/Termen iii) Rundungsfehler, round-off or rounding error Endl. Stellenzahl bei num. Rechnungen D.h. Zahlen und Ergebnisse können nicht exakt dargestellt werden. Bem.: a) ii) Existiert sogar auf Computer mit unendl. Genauigkeit. b) iii) betrifft alle Rechenschritte (ausführlichere Bhdlg.) c) ill-conditioned: beliebig kleiner Fehler in Anfangsdaten >> großer Fehler in Ergebnissen. d) Fehlerbeschreibung: sei x die berechnete Lsg. zu wahrem Wert x, dann ist x x der absolute Fehler, und (x x)/x der relative Fehler e) Errorbound max. möglicher Fehler, wichtig bei vielen num. Methoden, berechneter Fehler typischerweise kleiner als berechneter Errorbound. 1.3 Fließpunkt- Floating-Point- Darstellung Jedes x wird durch ein x dargestellt mit Vorzeichen, Mantisse, Exponent: Normalisierte Darstellung: ā = ±(0.a 1 a 2...a m ) b c } {{ } a mit a < 1 = b 0, 0 a i b 1, und a 1 0, falls x 0 (z.b. 153.12.15312 10 3 ). b bezeichnet die Basis der Darstellung: Binär: b = 2, zwei digits Dezimal: b = 10, zehn digits Hexadezimal: b = 16, sechzehn digits (Tägl. Leben dezimal, Computer: binär, hexadezimal) Das hexadezimale System ist eine natürliche Erweiterung des Binärsystems, weil 2 4 = 16, d.h. es gibt genau eine hexadeziamal Zahl für vier Binärdigits ( bits ).
1.3. FLIESSPUNKT- FLOATING-POINT- DARSTELLUNG 3 1.3.1 Umwandlung von einer Darstellung in die andere sei r 1 = 1/10 = 0.1 (in dezimaler Form), dann existieren Konstanten {α k } k=1 so, dass r 1 = 0.1 = α 1 /16 + α 2 /16 2 + α 3 /16 3... Multipliziere mit 16: 16r 1 = 1.6 = α 1 + α 2 /16 + α 3 /16 2... D.h. α 1 = 1 und r 2 0.6 = α 2 /16+α 3 /16 2... Wieder, 16r 2 = 9.6 = α 2 +α 3 /16..., also α 2 = 9 und r 3 0.6 = α 3 /16+ α 4 /16 2... Also wiederholt sich der Vorgang, und man erhält: (0.1) 10 = (0.1999...) 16, oder r 1 = (0.1) 10 = (0.1999...) 16 = (0.0001 1001 1001...) 2 D.h. Endl. Darstellung in einer Basis <=> nicht endl. Darstellung in anderer. Bem: Erstes Bit einer normalisierten Darstellung ist immer 1 (für die Basis 2), d.h. man kann es weglassen zur Erhöhung der Genauigkeit. 1.3.2 IEEE Standard Einfache Genauigkeit, oder Single precision (in Ftn: REAL, REAL*4; in C: float) hat ein 32 bit Wort (4 Byte): S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31 Erstes Bit: S Vorzeichen (sign) nächsten 8 Bit: E Exponent nächsten 23 Bit: F Mantisse (Fraction) Der Wert der Zahl ist: Falls E = 255 (= 2 8 1) und F ungleich Null, dann x = NaN. Falls E = 255 und F gleich Null und S = 1, dann x = Infinity. Falls E = 255 und F gleich Null und S = 0, dann x = Infinity. Falls 0 < E < 255, dann x = ( 1) S 2 E 127 (1.F), wobei 1.F die Binärzahl bezeichnet, die man erhält, wenn vor F eine führende 1 mit Binärpunkt gesetzt wird. Die 127 ist der Bias des Exponenten. Falls E = 0 und F ungleich Null x = ( 1) S 2 126 (0.F). Unnormalized Values. Falls E = 0 und F = 0 und S = 1, dann x = 0. Falls E = 0 und F = 0 und S = 0, dann x = 0. Die doppelte Genauigkeit, oder Double Precision (REAL*8, double) hat zwei 32 bit Worte (Doppelwort oder 8 Byte, 64 Bit): Es besteht aus: Erstes Bit: S Vorzeichen (sign)
4 KAPITEL 1. FEHLER IN NUMERISCHEN RECHNUNGEN nächsten 11 Bit: E Exponent nächsten 52 Bit: F Mantisse (Fraction) Ersetze einfach oben für E = 255 = 2 8 1, jetzt E = 2047 = 2 11 1, und für den Bias 1023 statt 127. Beispiele (für Single): 1 11111111 00100010001001010101010 = NaN 0 10000000 00000000000000000000000 = +1 * 2**(128-127)* 1.0 = 2 1 10000001 10100000000000000000000 = -1 * 2**(129-127)* 1.101 = -6.5 4 1/2 1/8 1.3.3 Wichtige Konstanten i) Maschinen-Genauigkeit (Machine Accuracy) DEF: Die kleinste (absolute) Zahl, die, falls zu einer (floating-point) 1.0 addiert wird, ein Ergebnis anders als 1.0 ergibt, heißt: Maschinen-Genauigkeit ɛ m. Für Single-Precission ist ɛ m typischerweise 3 10 8. ɛ m ist der Fehler, der zu dem letzten signifikanten Bit der Mantisse gehört. Der Rundungsfehler liegt in der gleichen Grössenordnung. ii) Die kleinste (m)/grösste (M) darstellbare Zahl Die kleinste auf dem Computer darstellbare Zahl m ist nicht ɛ m sondern eine Zahl, deren Grösse durch den Exponenten bestimmt wird. Für eine typische Workstation (hier HP) erhält man Type Sign. Stellen m M Real*4 7.2 digits 1.175.. 10 38 3.403...10 +38 Real*8 15.95 digits 2.225.. 10 308 1.797...10 +308 Integer (*4) 2147483648 Bem: a) Addition zweier Zahlen erfolgt durch ein Verschieben der Mantisse der kleineren nach rechts und erhöhen des Exponenten bis beide Exponenten übereinstimmen, d.h. falls die Zahlen zu unterschiedich sind, werden die Stellen der kleineren Zahl ausgelöscht. b) Rundung durch Chopping, d.h. einfaches Abschneiden, oder symmetrische Rundung (addiere 5 zur letzten sign. Stelle und schneide ab) c) Falls eine Zahl größer als M wird, gibt einen Overflow, falls kleiner als m, einen Underflow d) Integerarithmetik (Beschleunigung von Rechnungen, genauer) 1.4 Fehler bei arithmetischen Operationen Sei x eine Approximation an x, der Fehler ist e(x) = x x. Addition: x + y = x + e(x) + ȳ + e(y) = x + ȳ + (e(x) + e(y))
1.5. LITERATUR 5 Scheinbar ist der Gesamtfehler die Summe Einzelfehler, aber es kann auch sein, dass x+ȳ nicht exakt darstellbar sind, damit ergibt sich als höherer Gesamtfehler: e(x) + e(y) plus dem Fehler zwischen x + ȳ und x + ȳ. - Addition kann zu Overflow führen. - Addition nicht unbedingt assoziativ. - Bei mehreren Summanden sollten die kleineren zuerst addiert werden (s.u.). Beispiel/Übung: Summe 1/k. Subtraktion: Fehleranalyse ähnlich der Addition, aber jetzt Verlust von signifikanten Stellen möglich (subtraktive Auslöschung), falls die Zahlen fast gleich groß sind. Bspl: f(x) = (1 + x e x )/x 2 Auch wenn e x sehr genau, bei kleineren x gibt s größere Fehler. Möglicher Ausweg: Entwickle e x, e x = 1 + x + x 2 /2! + x 3 /3!... f(x) = 1/2! x/3! x 2 /4!... Bspl. mit sieben sign. Stellen, siehe Tabelle: x f(x) direkte Summe f(x) Reihenentwicklg. 0.1 -.5171781E 00-0.5170917E00 0.01 -.5054476E 00-0.5016708E00 0.001 -.9536749E 00-0.5001667E00 0.0001 -.9536745E 02-0.5000166E00 0.00001 0.0-0.5000016E00 Multiplikation: x y = ( x + e(x)) (ȳ + e(y)) = x ȳ + x e(y) + ȳ e(x) + e(x) e(y) Fehler ist Rundungsfehler von x ȳ. Division: Ähnlich Multiplikation: Fehler ist Rundung von x/ȳ, aber Probleme bei Division durch ȳ 0. 1.5 Literatur Johnson, Lee W. & Riess, R. Dean, Numerical Analysis, Addison-Wesley Publishing Co., 1977 IEEE Standard, http://www.psc.edu/general/software/packages/ieee/ieee.html Press, Flannery, Teukolsky, Vetterling, Numerical Recipes
6 KAPITEL 1. FEHLER IN NUMERISCHEN RECHNUNGEN