1 Computerarithmetik 1.1 Zahlendarstellungen

Werbung
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
Herunterladen