1 Computerarithmetik Wir erinnern an die Mengen N = {1, 2, 3, . . . } Z = {0, ±1, ±2, . . . } Q, R . 1.1 Zahlendarstellungen Die Basis für Zahlendarstellungen auf Digitalrechnern bildet die folgende Darstellung reeller Zahlen in einer Basis β ∈ N, β ≥ 2. Theorem 1.1.1 Jedes 0 6= x ∈ R lässt sich in der Form x=σ ∞ X ak+e β −k =σ ∞ X k=1 k=−e+1 ak β −k β e (1.1.1) darstellen, wobei a1 6= 0 und • a1 , a2 , . . . , ∈ {0, 1, 2, . . . , β − 1}, die Ziffern, • e ∈ Z, der Exponent, • σ ∈ {+, −} das Vorzeichen ist; zwecks Eindeutigkeit der Ziffern in (1.1.1) gelte: es existiere eine unendliche Teilmenge N1 ⊂ N mit ak 6= β − 1 für k ∈ N1 . (1.1.2) Bemerkung 1.1.2 (1.1.2) ist notwendig, um (1.1.1) eindeutig zu machen - z.B. ist für x = 0.999 · · · = 1.0 in (1.1.1) die Darstellung x = + 0.1 · 101 mit σ = +, a1 = 1, e = 1 eindeutig. Beispiel 1.1.3 (Zahlsystem) April 13, 2007 System β Dezimal 10 0, 1, 2, . . . , 9 Binär 2 0, 1 Oktal 8 0,1,2,. . . ,7 Hexadezimal 16 0, 1, 2, . . . , 9, A,B,C,D,E,F, Ziffern 22 1.2. GLEITPUNKT-ZAHLSYSTEME 1.2 1.2.1 Gleitpunkt-Zahlsysteme Gleitpunktzahlen Auf Digitalrechnern werden nur endlich viele Zahlen F ⊂ R verarbeitet, die Gleitpunktzahlen. Definition 1.2.1 (Gleitpunktzahlen F(β, t, emin , emax )) Sei β ∈ N, β ≥ 2 eine Basis und t ∈ N eine Mantissenlänge, sowie emin < 0 < emax mit emin , emax ∈ Z Exponentenschranken. Dann ist die Menge F = F(β, t, emin , emax ) wie folgt definiert: t X ak β −k β e : a1 , . . . , at ∈ {0, 1, . . . , β − 1}, σ k=1 ∪ {0} (1.2.1) F := a1 6= 0, σ ∈ {+, −} e ∈ Z, emin ≤ e ≤ emax b ⊃ F ist definiert durch alle x = σ(Pt ak β −k ) β e wie in F, für die zusätzlich Die Menge F k=1 noch e = emin ∧ a1 = 0 (1.2.2) zulässig ist. Offensichtlich ist |F| < ∞, F ⊂ Q . b werden Gleitpunktzahlen genannt. Zu x ∈ F, x b∈F x ∈ F, x = σ a β e ∈ F, a= t X ak β −k (1.2.3) k=1 b mit der ist σ Vorzeichen, a Mantisse mit Ziffern a1 , . . . , at , e Exponent. Wir nennen x ∈ F b heisst normalisierte Darstellung (1.2.3) normalisiert, falls in a gilt a1 ≥ 1; die Menge F ⊂ F b denormalisierte Gleitpunktzahlen. Gleitpunktzahlen, F 1.2.2 Eigenschaften von F Theorem 1.2.2 In F = F(β, t, emin , emax ) gilt xmin (F) := min{x ∈ F : x > 0} = β emin−1 , xmax (F) := max{x ∈ F} = β emax (1 − β −t ) . (1.2.4) (1.2.5) Beweis: Sei x ∈ F mit Mantisse a. Dann gilt wegen a1 6= 0 β −1 ≤a ≤ t X k=1 β −k (β − 1) = 1 − β −t ↑ ↑ a1 ≥ 1 a k ≤ β − 1 . April 13, 2007 23 (1.2.6) 2 1.2. GLEITPUNKT-ZAHLSYSTEME Bemerkung 1.2.3 Schematisch ist der von F überdeckte Bereich von F in R gegeben durch F ⊂ Bereich (F) = [−xmax (F), −xmin (F)] ∪ {0} ∪ [xmin (F), xmax (F)] . −xmax −xmin 0 fig1.1.eps 138x× 10 mm min R xmax Die Verteilung der x ∈ F in Bereich (F) ist nichtuniform. Theorem 1.2.4 In jedem Intervall [β e−1 , β e ] ⊆ Bereich (F) sind gleichviele x ∈ F, d.h. ∀emin ≤ e ≤ emax : F ∩ [β e−1 , β e ] = const . (1.2.7) Beweis: Es gilt für emin ≤ e ≤ emax , F ∩ [β e−1 , β e ] = wobei (β −1 + jβ −t ) β e : j = 0, 1, . . . , M # {z } | β e−1 +j β e−t M # := β t − β t−1 , die Anzahl aller Mantissen von x in F(β, t, emin , emax ) mit Exponent e ist; denn es ist a = β −1 + j β −t , j = 0, 1, . . . , β t−1 (β − 1) = β t − β t−1 = M # ∈ [β −1 , 1] , also liegen alle Mantissen in [β −1 , 1 − β −t ] und dort gleichabständig mit Abstand β −t . Damit liegen alle x ∈ F ∩ [β e−1 , β e ] äquidistant mit Abstand β e−t . 2 Anschaulich gilt hier daher xmin 0 b emin −1 b fig1.2.eps 183 × 15 mm emin R b emin +1 . . . Eine wichtige Kenngrösse von F ist der maximale relative Abstand von x ∈ Bereich (F) zu F. Theorem 1.2.5 Sei 0 6= x ∈ Bereich (F). Dann gilt 1 |x − z| ≤ β −t+1 . |x| 2 min z∈F (1.2.8) Beweis: Ohne Beschränkung der Allgemeinheit sei x > 0, x ∈ Bereich (F). Dann gilt x ∈ [xmin , xmax ] und somit existiert ein Exponent e ∈ [emin , emax ] derart, dass x ∈ [β e−1 , β e ]. Theorem 1.2.4 =⇒ z ∈ F∩[β e−1 , β e ] gleichverteilt mit Abstand β e−t . Also gilt minz∈F |x−z| ≤ 12 β e−t . Wegen x ≥ β e−1 folgt |x − z|/|x| ≤ 1 2 β e−t /β e−1 , d.h. (1.2.8). 2 Bemerkung 1.2.6 Aus (1.2.8) folgt, dass für feste Basis β die Genauigkeit von F nur von der Mantissenlänge t abhängt; emin , emax bestimmen nur den Bereich (F), nicht aber die Genauigkeiten von F. April 13, 2007 24 1.2. GLEITPUNKT-ZAHLSYSTEME 1.2.3 b Eigenschaften von F Theorem 1.2.7 Auf dem Bereich b = F, (−∞, −xmin ] ∪ [xmin , +∞) ist F und auf dem Intervall [−β emin , +β emin ] = [−βxmin , +βxmin ] b äquidistant verteilt mit konstantem Abstand β emin −t : es gilt sind x ∈ F Insbesondere gilt b ∩ [−β emin , β emin ] = {jβ emin−t : j = −β t , . . . , β t } . F (1.2.9) b:x x bmin := β emin−t = min{b x∈F b > 0} . (1.2.10) e Pt −k b β ∈ F\F. Dann ist a1 = 0, und e = emin . Beweis: Sei x b = σ k=1 ak β Beschränkung der Allgemeinheit sei σ = +. Wegen ak ≤ β − 1 folgt a= t X ak β k=2 d.h. −k ≤ (β − 1) t X k=2 β −k = β −1 − β −t , Ohne (1.2.11) b < {x ∈ R : 0 < |x| < xmin } . F\F b sind die Mantissen a in (1.2.11) gleich verteilt im Intervall [0, 1 − β −t ] mit Abstand Für x b ∈ F\F β −t , woraus (1.2.9) folgt. (1.2.10) ist trivial. 2 b “aufgefüllt” worBemerkung 1.2.8 Die “Lücke” in F zwischen −xmin (F), 0, +xmin (F) ist in F b b gilt den mit den denormalisierten Zahlen x b ∈ F\F. Beachte aber, dass in F min b z 6=x zb∈F,b bmin |b z−x bmin | = 1. |b xmin | Die meistverbreitete Gleitpunktarithmetik ist die IEEE Arithmetik. Definition 1.2.9 (IEEE Standardarithmetiken F) Die 2 Gleitpunktarithmetiken des IEEE Standards von 1995 sind binär, d.h. β = 2; es gilt: Typ Single Size Mantisse a Exponent e 32 bits 23 + 1 bit 8 bits Double 64 bits 52 + 1 bit 11 bits xmin u(F) 2 −24 ∼ 5.96 · 10 −8 2−53 ∼ 1.11 · 10−16 10 −38 10−308 xmax 10+38 10+308 Bemerkung 1.2.10 FIEEE is normalisiert, sodass immer gilt a1 = +1; deshalb wird a1 in FIEEE nicht gespeichert. April 13, 2007 25 1.3. RUNDEN UND ABSCHNEIDEN 1.3 Runden und Abschneiden Der relative Fehler in (1.2.8) ist beschränkt unabhängig von der Grösse von x ∈ F; die Grösse 1 1−t β heisst Rundungseinheit (engl. “unit roundoff”): 2 u(F) := 1 2 β 1−t . (1.3.1) Es ist die wichtigste Grösse bei der mathematischen Analyse der Fehler, die durch Einschränken der Operationen +, −, ∗, / von R auf F anfallen. Es symbolisiere ‘◦’ eine Grundrechenoperation: ◦ ∈ {+, −, ∗, /} . Setzen wir formal ∞ = x/0 für x ∈ Q oder x ∈ R, gilt ◦ : Q × Q → Q ∪ {∞}, ◦ : R × R → R ∪ {∞} . Es gilt aber nicht ◦ : F × F → F ∪ {∞} , sondern F ◦ F ) F ∪ {∞} . Um “zurück” nach F zu kommen, müssen wir runden. Definition 1.3.1 Sei F = F(β, t, emin , emax ) mit β gerade. Dann ist rd(·): Bereich (F) → F für ∞ X x=σ ak β −k β e ∈ Bereich (F) k=1 definiert durch t X β −k ak β β e für at+1 ≤ − 1 , σ 2 k=1 rd(x) = t X β σ ak β −k + β −t β e für at+1 ≥ 2 k=1 der auf t Stellen gerundete Wert von x. (1.3.2) Beispiel 1.3.2 Sei β = 10, t = 3. Dann ist rd(0.9996) = 0.1 × 101 = 1.0 . Theorem 1.3.3 Sei F = F(β, t, emin , emax ) gegeben. Dann gilt: ∀x ∈ Bereich (F) : April 13, 2007 rd(x) ∈ F , 26 |x − rd(x)| = min |x − z| . z∈F (1.3.3) 1.3. RUNDEN UND ABSCHNEIDEN Beweis: Sei x ∈ Bereich (F) gegeben durch ∞ X x=σ k=1 ak β −k β e , ohne Beschränkung der Allgemeinheit σ = + . Dann gilt: t X k=1 ak β −k ≤ =⇒ =⇒ x ∈ [β e−1 , β e ] t X | k=1 ∞ X k=1 ak β −k ≤ t X ak β −k + k=1 z ∞ X k=t+1 = β −t }| { (β − 1) β −k | {z } β −k+1 − β −k t X ak β −k + β −t β e ak β −k β e ≤ |x| ≤ {z ≥ β −1 |k=1 } {z ≤1 } =⇒ rd(x) in (1.3.2) ergibt nach Theorem 1.2.5 gerade den Nachbarn von x in F, und insbesondere ist dann rd(x) ∈ F ∩ [β e−1 , β e ]. Wir beweisen nun |x − rd(x)| ≤ 1 2 β −t+e . (1.3.4) Aus (1.3.4) folgt sofort, dass rd(x) die beste Approximation von x aus F ist, da β −t+e gerade der Abstand von je zwei “Nachbarn” in F ∩ [β e−1 , β e ] ist. Für (1.3.4) unterscheiden wir 2 Fälle: Fall 1: at+1 ≤ β/2 − 11. |x − rd(x)| = ∞ X k=t+1 ak β −k β e = at+1 β −(t+1) + ∞ X k=t+2 ak β −k β e (β − 1) β −k β e {z } | k=t+2 −k+1 −k β −β = (β/2 − 1) β −(t+1) + β −(t+1) β e ≤ (β/2 − 1) β −(t+1) + = April 13, 2007 1 2 β −t+e . 27 ∞ X 1.3. RUNDEN UND ABSCHNEIDEN Fall 2: at+1 ≥ β/2 β/2. |x − rd(x)| = β −t − ∞ X k=t+1 ak β −k β e − at+1 β − ak β −k β e | {z } k=t+2 {z } | ≥ β −t /2 ≥ 0 1 ≤ β −t+e . = β −t −(t+1) ∞ X 2 2 Korollar 1.3.4 Sei F Gleitpunktarithmetik. Dann gilt 1) ∀x ∈ Bereich (F)\{0} : |x − rd(x)| 1 ≤ u(F) = β −t+1 . |x| 2 2) ∀x ∈ Bereich (F)\{0}: rd(x) = x + ∆x mit ∆x ∆x ∈ R : ≤ u(F) . x Eine Alternative zum Runden ist das Abschneiden (vgl. ‘truncate’): Definition 1.3.5 Das ‘Abschneiden’ tc(·) ist die Abbildung tc: Bereich (F) → F, definiert durch t X tc(x) = σ ak β −k β e ∈ F(β, t, emin , emax ) (1.3.5) k=1 für x=σ ∞ X k=1 ak β −k β e ∈ Bereich (F) . tc(x) heisst die auf t -Stellen abgeschnittene Zahl. Theorem 1.3.6 1) ∀x ∈ Bereich (F(β, t, emin , emax ))\{0}: |x − tc(x)| ≤ 2u (F) . |x| ∆x 2) ∀x ∈ Bereich (F(β, t, emin , emax ))\{0}: tc(x) = x + ∆x, ≤ 2u (F). x Beweis: Analog zum Beweis von Theorem 1.3.3. Definition 1.3.7 “f `(·)” Mit f `: Bereich (F) → F bezeichnen wir generisch rd(·) oder tc(·). April 13, 2007 28 2 1.4. GLEITPUNKTARITHMETIK UND RUNDUNGSFEHLERANALYSE 1.4 Gleitpunktarithmetik und Rundungsfehleranalyse In Gleitpunktarithmetik sind Fehler durch Rundung unvermeidbar, da für x, y ∈ F das Ergebnis x ◦ y der elementaren Operationen ◦ ∈ {+, −, ∗, /} im Allgemeinen nicht in F ist. Stattdessen wird f `(x ◦ y) berechnet und es gilt im Allgemeinen ∀x, y ∈ F : x ◦ y 6= f `(x ◦ y) . (1.4.1) Theorem 1.4.1 Für alle x ∈ Bereich (F) existiert δ ∈ R f `(x) = x(1 + δ) mit |δ| < u (F), für f ` = rd . (1.4.2) Beweis: Ohne Beschränkung der Allgemeinheit sei x > 0, x ∈ R. Dann ist 0 6= x = µβ e−t , für ein µ ∈ R mit β t−1 ≤ µ ≤ β t − 1 . Also liegt x zwischen y1 = bµc β e−t und y2 = dµe β e−t , y1 , y2 ∈ F, und, da y1 , y2 benachbart in F sind, gilt entweder f `(x) = y1 oder f `(x) = y2 und |y2 − y1 | β e−t |f `(x) − x| ≤ ≤ 2 2 =⇒ f `(x) − x 1 e−t β 1 ≤ 2 e−t ≤ β 1−t = u(F) . x µβ 2 2 (1.4.1) und (1.4.2) motivieren Definition 1.4.2 (Standardmodell der Rundung) f `(x ◦ y) = (x ◦ y)(1 + δ), |δ| ≤ u(F) für ◦ ∈ {+, −, ∗, /} . (1.4.3) Alternativ zu (1.4.3) kann man auch f `(x ◦ y) = x◦y , 1 + δ0 |δ 0 | ≤ u(F) für ◦ ∈ {+, −, ∗, /} (1.4.4) benutzen; (1.4.3) =⇒ (1.4.4) (Übung !) mit δ 0 6= δ im Allgemeinen. Als eine Anwendung geben wir die Rundungsfehleranalyse in Skalarprodukten. Seien dazu x, y ∈ Fn Vektoren der Länge n . Theorem 1.4.3 Seien x, y ∈ Fn mit n·u(F) ≤ 0.01 . (1.4.5) |f `(x> y) − x> y| ≤ 1.01 n·u(F) |x|> |y| (1.4.6) Dann gilt wobei für x ∈ Fn der Vektor z = |x| gegeben ist duch zi = |xi |. Beweis: Wir berechnen f `(x> y) nach April 13, 2007 29 1.4. GLEITPUNKTARITHMETIK UND RUNDUNGSFEHLERANALYSE Algorithmus 1.4.4 s := 0 for k = 1 : n s := s + xk yk end . Der output von Algorithmus 1.4.4 in Gleitpunktarithmetik ist f `(x> y). Wir schätzen |x> y − f `(x> y)| ab. Dazu sei p X sp := f ` xk y k . k=1 Dann ist |δ1 | ≤ u s1 = x1 y1 (1 + δ1 ), und für p = 2 : n: sp = f ` sp−1 + f `(xp yp ) = sp−1 + xp yp (1 + δp ) (1 + p ), |δp |, |p | ≤ u . Damit folgt (nachrechnen!): es gibt γk ∈ R mit f `(x> y) = sn = n X xk yk (1 + γk ) k=1 wobei (1 + γk ) = (1 + δk ) n Y (1 + j ), 1 := 0 . j=k Daher gilt > > |x y − f `(x y)| ≤ n X k=1 |xk yk | |γk | . (1.4.7) Um die γk durch u(F) abzuschätzen, brauchen wir Lemma 1.4.5 Für α ∈ R mit (1 + α) = n Y k=1 (1 + αk ), |αk | ≤ u(F), n·u ≤ 0.01 gilt |α| ≤ 1.01 n·u . Beweis (von Lemma 1.4.5): n Y |α| = (1 + αk ) − 1 ≤ (1 + u)n − 1 . k=1 April 13, 2007 30 (1.4.8) 1.5. AUSLÖSCHUNG Da 1 + x ≤ ex für x ≥ 0, gilt (1 + u)n ≤ exp(n·u). Also (n·u)2 (n·u)3 + +... 2! 3! n·u n·u 2 n·u 3 + +... + ≤ n·u 1 + 2 2 2 1 = n·u 1 −·u/2 (1 + u)n − 1 ≤ n·u + < n·u 1 < 1.01 n·u . 0.995 Damit folgt in (1.4.7), dass > > |x y − f `(x y)| ≤ max |γk | · k n X k=1 ≤ 1.01 n·u(F) · =⇒ (1.4.6) . |xk yk | n X k=1 |xk | |yk | 2 1.5 Auslöschung Auslöschung tritt beim Subtrahieren von zwei fast gleichen Zahlen in Gleitpunktarithmetik auf. Beispiel 1.5.1 Betrachte f (x) = 1 − cos(x) , x2 x = 1.2 × 10−5 Dann ist cos(x) auf 10 Dezimalen gerundet c = 0.9999 9999 99 , und 1 − c = 0.0000 0000 01 . Daher ist (1 − c)/x2 = 10−10 /1.44 × 10−10 = 0.6944 . . . . Da 0 ≤ f (x) < Ergebnis falsch. Allgemeiner seien a, b ∈ R gegeben, und b a = f `(a) = a(1 + δa ), April 13, 2007 31 bb = f `(b) = b(1 + δb ) 1 2 für x 6= 0, ist das 1.5. AUSLÖSCHUNG mit |δa | ≤ u, |δb | ≤ u. Dann gilt für x = a − b und x b=b a − bb x − x |a| + |b| b −aδa + bδb = ≤ max{|δa |, |δb |} x a−b |a − b| |a| + |b| . ≤ u(F) |a − b| (1.5.1) Der relative Fehler in x = a − b ist gross, falls |a − b| |a| + |b| . Beispiel 1.5.2 (Berechnung von (ex − 1)/x für x ↓ 0) Wir berechnen x f (x) = (e − 1)/x = ∞ X i=0 xi (i + 1)! (1.5.2) in FIEEE Single auf 2 Arten. Algorithmus 1.5.3 if x = 0, f = 1 else f = (ex − 1)/x; end . Algorithmus 1.5.4 y = ex ; if y = 1, f = 1 else f = (y − 1)/ log(y); end . −24 IEEE ∼ 6×10−8 Rundungsfehleranalyse. Wir nehmen an, wir sind in FIEEE Single mit u(FSingle ) = 2 und exp(·), log(·) erfüllen (1.4.2). Dann gibt Algorithmus 1.5.3 für x = 9 · 10−8 ex − 1 1.19209290 × 10−7 f` = f` = 1.32454766 , x 9.0 × 10−8 Algorithmus 1.5.4 dagegen ergibt f` Exakt ist ex − 1 log ex = f` 1.19209290 × 10−7 1.19209282 × 10−7 = 1.00000006 . ex − 1 9.00000041 × 10−8 = = 1.00000005 . log ex 9.0000001 × 10−8 Beachte: Algorithmus 1.5.4 berechnet aufgrund von Auslöschung sehr ungenaue Werte für e x −1 und log ex ; die Rundungsfehler heben sich beim Dividieren heraus! Analyse von Algorithmus 1.5.4 mit (1.4.2), (1.4.3) folgt yb = ex (1 + δ), |δ| ≤ u(F). Falls yb = 1, folgt damit ex (1 + δ) = 1 ⇐⇒ x = − log(1 + δ) = −δ + δ 2 /2 − δ 3 /3 + . . . , April 13, 2007 32 1.5. AUSLÖSCHUNG sodass folgt rd(f (x)) = rd 1 + x/2 + x2 /6 + . . . x=−δ+O(δ2 ) = 1 . Falls yb 6= 1, folgt mit (1.4.3) Definiere (b y − 1)(1 + δ1 ) fb = f ` (b y − 1)/ log yb = (1 + δ3 ), log yb(1 + δ2 ) |δi | ≤ u(F) . (1.5.3) (1.5.4) v := yb − 1 . Dann gilt g(b y) : = = yb − 1 v v = = 2 log yb log(1 + v) v − v /2 + v 3 /3 − . . . v 1 = 1 + + O(v 2 ) . 2 1 − v/2 + v /3 − . . . 2 Falls x klein ist, ist y ∼ 1 und g(b y) − g(y) = (1.5.4) =⇒ yb − y ex δ δ δ ≈ ≈ ≈ g(y) 2 2 2 2 fb − f ≤ 3.5 u(F) . f (1.5.5) Also sind in Algorithmus 1.5.4, yb − 1 und log yb ungenau. Aber: (b y − 1)/ log yb ist eine sehr genaue Approximation an (y − 1)/ log y bei y = 1, da g(y) := (y − 1)/ log y dort “langsam variiert”, denn g(·) hat bei y = 1 eine hebbare Singularität und g 0 (1) = 1. April 13, 2007 33