Kapitel 12 Zahlendarstellungen und - homepages.math.tu

Werbung
Kapitel 12
Zahlendarstellungen und
Rechnerarithmetik
12.1
Zahlensysteme
Die Darstellung von Zahlen (ganz allgemein von Daten) basieren auf sogenannten Zahlensystemen.
Diese wiederum nutzen Zeichen eines sogenannten Alphabets zu ihrer Darstellung.
Ist b > 1 eine beliebige natürliche Zahl, so heißt die Menge Σb := {0, 1, . . . , b − 1} das Alphabet des
b-adischen Zahlensystems.
Beispiel 12.1
1. Dem Dezimalsystem liegt das Alphabet Σ10 = {0, 1, 2, . . . , 9} zugrunde. Worte über diesem
Alphabet sind etwa 123, 734, 7806. Feste Wortlänge, etwa n = 4, erreicht man durch “führende
Nullen”: 0123, 0734, 7806.
2. Σ2 = {0, 1}: Dual- oder Binäralphabet
Σ8 = {0, 1, 2, 3, 4, 5, 6, 7}: Oktalalphabet
Σ16 = {0, . . . , 9, A, . . . , F}: Hexadezimalalphabet
Man beachte, dass Σ16 streng genommen das Alphabet {0, . . . , 15} bezeichnet; anstelle der “Ziffern” 10, 11 usw. werden jedoch generell, d. h. in allen Alphabeten Σb mit b > 9, “neue” Symbole A, B usw. (hier also A, . . . , F) verwendet.
Diese Basen b = 2, 8 bzw. 16 spielen in der Informatik eine besondere Rolle.
3. Alte Basen sind b = 12 (Dutzend) und b = 60 (Zeitrechnung).
Natürliche Zahlen können in jedem b-adischen Zahlensystem dargestellt werden:
Version vom 30. Dezember 2004
297
298
KAPITEL 12. ZAHLENDARSTELLUNGEN UND RECHNERARITHMETIK
Satz 12.1 (b-adische Darstellung natürlicher Zahlen) Sei b ∈ N mit b > 1. Dann ist jede natürliche
Zahl z mit 0 ≤ z ≤ bn − 1 (und n ∈ N) eindeutig als Wort der Länge n über Σb darstellbar durch
n−1
z=
∑ zi bi
i=0
mit zi ∈ Σb für i = 0, . . . , n − 1. Als vereinfachende Schreibweise ist dabei auch folgendes üblich (“Ziffernschreibweise”)
z = (zn−1 zn−2 . . . z1 z0 )b .
Beweis: Der Beweis erfolgt durch Induktion nach z.
Induktionsanfang: z < b hat eine eindeutige Darstellung mit z0 = z und zi = 0 sonst.
Induktionsvoraussetzung: Die Behauptung sei richtig für alle Zahlen 0, 1, . . . , z − 1.
Schluss auf z ≥ b: Es ist z = (z div b) · b + (z mod b). Da z0 := z div b < z ist, hat z0 nach Induktionsvoraussetzung die (eindeutige) Darstellung
z0 = (z0n−1 z0n−2 . . . z01 z00 )
mit z0n−1 = 0, da z0 · b ≤ z ≤ bn − 1. Also ist (zn−1 , . . . , z0 ) mit zn−1 := z0n−2 , zn−2 := z0n−3 , . . . , z1 := z00
und z0 := z mod b eine n-stellige Darstellung von z in Σb .
Angenommen, es gibt zwei verschiedene solche Darstellungen von z, etwa
z = (z1n−1 , . . . , z10 )b = (z2n−1 , . . . , z20 )b .
Sei dann ` der größte Index mit z1` 6= z2` , o. B. d. A. z1` > z2` . Dann müssen die niedrigwertigen Stellen
z2`−1 , . . . , z20 eine Einheit der höherwertigen Stelle ` “wettmachen”.
Nun hat aber der größte durch niedrigwertige Stellen erreichbare Wert die Form
(b − 1)b0 + (b − 1)b1 + · · · + (b − 1)b`−1 = (b − 1)(b0 + b1 + · · · + b`−1 )
b` − 1
= (b − 1)
= b` − 1 < b` .
b−1
Da 1 · b` gerade eine Einheit der höherwertigen Stelle ` ist, kann diese Einheit nicht “wettgemacht”
werden. Also ergibt sich ein Widerspruch, d. h. beide Darstellungen müssen gleich sein.
Aus dem Beweis erhält man direkt einen Algorithmus zur Umwandlung in die b-adische Darstellung:
Algorithmus 12.1
for i := 0 to n − 1 do zi := 0;
i := 0;
while z > 0 do
299
12.1. ZAHLENSYSTEME
begin
zi := z mod b;
z := z div b;
i := i + 1;
end
Als Beispiel betrachten wir die Umwandlung von z = (364)10 in eine Oktalzahl:

364 = 45 · 8 + 4 
45 = 5 · 8 + 5
⇒ z = (554)8

5 = 0·8+5
Voraussetzung dieser Umwandlung ist also, dass die mod und div Operation im Ausgangszahlensystem implementiert ist.
Die Umkehrung b-adisch nach dezimal ist einfach und folgt dem Horner-Schema für die Multiplikation von Polynomen:
Algorithmus 12.2
z := 0
for i := n − 1 downto 0 do z := z ∗ b + zi
So ergibt (0554)8 den Dezimalwert ((0 · 8 + 5) · 8 + 5) · 8 + 4 = 364.
Korollar 12.1 (Dualdarstellung natürlicher Zahlen) Sei n ∈ N. Dann ist jede natürliche Zahl z mit
0 ≤ z ≤ 2n − 1 eindeutig darstellbar in der Form
n−1
z=
∑ zi 2i
i=0
mit zi ∈ Σ2 = {0, 1} (i = 0, . . . , n − 1).
So ist zum Beispiel (364)10 = (101101100)2 .
Zwischen Σ2 , Σ8 und Σ16 bestehen besonders einfache Umwandlungsalgorithmen. Dies liegt daran,
dass eine Ziffer zi ∈ Σ8 bzw. Σ16 gerade in Σ2 durch Wörter der Länge 3 bzw. 4 dargestellt werden
kann. Man kann daher die Umwandlungen Σ2 ↔ Σ8 und Σ2 ↔ Σ16 ziffernweise vornehmen. Ein Beispiel ist:
(364)10 = (101101100)2 = (|{z}
101 |{z}
101 |{z}
100 )2 = (554)8 = (0001
| {z} 0110
| {z } 1100
| {z })2 = (16C)16
(5)8 (5)8 (4)8
(1)16 (6)16 (12)16
b-adische Zahlensysteme sind jedoch nicht die einzige Möglichkeit zur Zahlendarstellung, wie folgender Satz zeigt.
300
KAPITEL 12. ZAHLENDARSTELLUNGEN UND RECHNERARITHMETIK
Satz 12.2 (Polyadische Darstellung natürlicher Zahlen) Es sei (bn )n∈N eine Folge natürlicher Zahlen mit bn > 1 für alle n ∈ N. Dann gibt es für jede natürliche Zahl z genau eine Darstellung der Form
N
i−1
i=0
j=0
z = ∑ zi ∏ b j = z0 + z1 b0 + z2 b1 b0 + . . . + zN bN−1 · . . . · b0
mit 0 ≤ zi < bi für i = 0, . . . , N.
Beweis: Übung.
Nimmt man als Folge der Zahlen (bn )n∈N etwa die Primzahlen 2, 3, 5, . . ., so hat 364 die Darstellung
(1, 5, 0, 2, 0), da 364 = 0 · (1) + 2 · (2) + 0 · (2 · 3) + 5 · (2 · 3 · 5) + 1 · (2 · 3 · 5 · 7).
12.2
Darstellung ganzer Zahlen im Rechner
12.2.1
Die Vorzeichen-Betrag Darstellung
Dies ist die im Alltag verwendete Darstellung. Hat man Wörter der Länge n (n Bit) zur Darstellung
zur Verfügung, wird das linkeste Bit für das Vorzeichen verwendet (0 = +, 1 = −), und die restlichen
Bits für den Betrag der Zahl.
Bei n = 3 lassen sich also die in Tabelle 12.1 angegebenen Zahlen darstellen. Da die 0 zwei Darstellungen hat, können so 2n − 1 Zahlen dargestellt werden.
Tabelle 12.1: 3-stellige Dualzahlen in Vorzeichen-Betrag Darstellung.
Bitmuster
000
001
101
011
100
101
110
111
Dezimalwert
0
1
2
3
−0
−1
−2
−3
Diese “natürliche” Darstellung ist auf Rechnern völlig unüblich. Der Grund liegt darin, dass hardwaremäßig nur Addierwerke (plus Zusatzlogik) verwendet werden. Daher verwendet man Darstellungen,
in denen die Subtraktion sehr einfach auf die Addition zurückgeführt werden kann. Dies ist bei der
Vorzeichen-Betrag Darstellung nicht der Fall. Wir haben daher in der Schule alle für die Addition und
Subtraktion verschiedene Algorithmen gelernt.
301
12.2. DARSTELLUNG GANZER ZAHLEN IM RECHNER
12.2.2
Komplement-Darstellungen
Komplement-Darstellungen erlauben eine einfache Rückführung der Subtraktion auf die Addition.
Sei x = (xn−1 , . . . , x0 )b eine n-stellige b-adische Zahl. Das (b − 1)-Komplement Kb−1 (x) von x erhält
man, indem man stellenweise das “Komplement” (b − 1) − xi zu xi bildet.
Beispiel:
K9 ((325)10 ) = (674)10
K1 ((10110)2 ) = (01001)2
Das b-Komplement von x erhält man, indem man das Kb−1 -Komplement bildet und 1 dazu addiert,
d. h.
Kb (x) = Kb−1 (x) + 1 .
Beispiel:
K10 ((325)10 ) = (674)10 + (1)10 = (675)10
K2 ((10110)2 ) = (01001)2 + (1)2 = (01010)2
Speziell im Dualsystem nennt man Kb−1 = K1 das Einerkomplement und Kb = K2 das Zweierkomplement, im Dezimalsystem spricht man bei Kb−1 = K9 vom Neunerkomplement und bei Kb = K10 vom
Zehnerkomplement.
Offenbar gilt:
Lemma 12.1 Für jede n-stellige b-adische Zahl x gilt:
a) x + Kb (x) = bn ,
b) x + Kb−1 (x) = bn − 1 = (b − 1, b − 1, . . . , b − 1)b ,
c) Kb−1 (Kb−1 (x)) = x, Kb (Kb (x)) = x.
Beweis: Nach Definition des (b − 1)-Komplements ist
x + Kb−1 (x) = (b − 1, b − 1, . . . , b − 1)b
=
n−1
n−1
i=0
i=0
∑ (b − 1)bi = (b − 1) ∑ bi
bn − 1
= (b − 1)
= bn − 1.
b−1
Also gilt b). a) folgt aus Kb (x) = Kb−1 (x) + 1. c) folgt aus a) und b).
Aussage a) bedeutet anschaulich, dass sich das b-Komplement von x bei n Stellen stets als Differenz
von x zu bn ergibt. Im Dezimalsystem mit n = 3 Stellen ergibt sich so für x = 374 K10 (x) = 1000 −
374 = 626.
302
KAPITEL 12. ZAHLENDARSTELLUNGEN UND RECHNERARITHMETIK
Komplemente lassen sich nun wie folgt zur Darstellung ganzer Zahlen verwenden. Wir betrachten
zunächst das meistens verwendete Zweierkomplement (bzw. allgemein das b-Komplement).
n
Sei n die zur Verfügung stehende Wortlänge. Im b-Komplement werden die bn Zahlen x mit −d b2 e ≤
n
x ≤ d b2 e − 1 dargestellt. Dieser Bereich heißt der darstellbare Bereich. Zahlen aus diesem Bereich
werden wie folgt dargestellt:
• nicht-negative Zahlen durch ihre b-adische Darstellung,
• negative Zahlen x durch das b-Komplement ihres Betrages |x|.
Bezeichnen wir mit (x)Kb = (xn−1 , . . . , x0 )Kb = die Ziffern von x in der b-Komplement-Darstellung, so
gilt also:
(x)b
falls x ≥ 0 ,
(x)Kb =
(12.1)
(Kb (|x|))b falls x < 0 .
Man beachte, dass man das Vorzeichen der in b-Komplement-Darstellung gegebenen Zahl x an der
Ziffer xn−1 ablesen kann.
Wir betrachten einige Beispiele:
1. Dezimalsystem, n = 2. Der darstellbare Bereich ist −50 ≤ x ≤ 49. Konkrete Darstellungen sind:
Zahl
43
−13
−27
38
Darstellung
43
87
73
38
2. Dualsystem, n = 3. Der darstellbare Bereich ist in Tabelle 12.2 angegeben.
Tabelle 12.2: 3-stellige Dualzahlen in Zweier-Komplement-Darstellung.
Bitmuster
000
001
010
011
100
101
110
111
Dezimalwert
0
1
2
3
−4
−3
−2
−1
Man beachte die Darstellung von x = −4. |x| hat das Bitmuster (100)2 . Daraus ergibt sich
K2 ((100)2 ) = K1 ((100)2 ) + (1)2 = (011)2 + (1)2 = (100)2 .
303
12.2. DARSTELLUNG GANZER ZAHLEN IM RECHNER
Wir betrachten jetzt die Addition von Zahlen in dieser Darstellung. Dazu bezeichne (x)Kb ⊕ (y)Kb
die ziffernweise Addition der Darstellungen von x und y, wobei ein eventueller Übertrag auf die n +
1-Stelle zwar zur Interpretation des Ergebnisses genutzt werden kann, aber in der Darstellung des
Ergebnisses verloren geht. Man rechnet also modulo bn .
Satz 12.3 Seien x, y n-stellige Zahlen in b-Komplement-Darstellung, und sei x + y im darstellbaren
Bereich. Dann gilt:
x + y = (x)Kb ⊕ (y)Kb .
Beweis: Sind x, y ≥ 0, so ist (x)Kb ⊕ (y)Kb = (x)b + (y)b mod bn = x + y mod bn . Ein Übertrag an der
höchsten Stelle entspricht im Binärsystem einem Verlassen des darstellbaren Bereiches (Überlauf ).
Sind x, y < 0 so ist nach Definition und Lemma 12.1
(x)Kb ⊕ (y)Kb
= (Kb (|x|))b + (Kb (|y|))b mod bn
= Kb (|x|) + Kb (|y|) mod bn
= bn − |x| + bn − |y| mod bn
= −(|x| + |y|) mod bn
= x+y.
Ist x ≥ 0 und y < 0, so ist entsprechend
(x)Kb ⊕ (y)Kb
= (x)b + (Kb (|y|))b mod bn
= x + Kb (|y|) mod bn
= x + bn − |y| mod bn
= x − |y|
= x+y.
Betrachten wir einige Beispiele im 2-stelligen Dezimalsystem. Dann ist n = 2 und −50 ≤ x ≤ 49 der
Bereich der darstellbaren Zahlen. Es folgt:
27 + 12
27 + (−15)
27 + (−34)
(−27) + (−21)
=
=
=
=
(27)K10 ⊕ (12)K10
(27)K10 ⊕ (85)K10
(27)K10 ⊕ (66)K10
(73)K10 ⊕ (79)K10
=
=
=
=
(39)K10
(12)K10
(93)K10
(52)K10
=
=
=
=
39
12
−7
−48
Die Rückführung der Subtraktion auf die Addition beruht dann einfach auf der Gleichung x − y =
x + (−y):
Satz 12.4 Seien x, y n-stellige Zahlen in b-Komplement-Darstellung, und sei x − y im darstellbaren
Bereich. Dann gilt:
x − y = (x)Kb ⊕ (Kb (y))Kb .
304
KAPITEL 12. ZAHLENDARSTELLUNGEN UND RECHNERARITHMETIK
Beweis: Nach Lemma 12.1 ist y + Kb (y) = bn . Also ist −y = Kb (y) − bn . Daraus folgt wegen der
modulo bn Rechnung:
(−y)Kb = (Kb (y))Kb .
Also ist
x − y = x + (−y) = (x)Kb ⊕ (−y)Kb = (x)Kb ⊕ (Kb (y))Kb .
Betrachten wir wieder einige Beispiele im 2-stelligen Dezimalsystem.
37 − 28
= (37)K10 ⊕ (K10 (28))K10
37 − 48
= (37)K10 ⊕ (K10 (48))K10
−12 − 24 = (88)K10 ⊕ (K10 (24))K10
= (37)K10 ⊕ (72)K10
= (37)K10 ⊕ (52)K10
= (88)K10 ⊕ (76)K10
= (9)K10
= (89)K10
= (64)K10
= 9
= −11
= −36
Dies beweist die Rückführung der Subtraktion auf die Addition. Natürlich muss dabei (wie bereits bei
der Addition) ein eventueller Überlauf bzw. Unterlauf (Verlassen des dargestellten Bereiches) durch
den Rechner oder durch den Programmierer abgefangen werden. Geschieht dies nicht, so werden die
entstehenden Bitmuster als Zahlen aus dem dargestellten Bereich interpretiert, was zu völlig falschen
Ergebnissen führt.
So ist z. B. bei n-stelliger Dualzahlarithmetik die größte darstellbare Zahl xmax = (011 . . . 1)2 , und
xmax + 1 erzeugt das Bitmuster (100 . . . 0), was als −2n interpretiert wird.
Die darstellbaren Zahlen kann man sich beim b-Komplement ringförmig angeordnet vorstellen, wobei
die größte positive und kleinste negative Zahl benachbart sind. Für b = 2 und n = 3 ergibt sich der in
Abbildung 12.1 dargestellte Ring.1
Durchläuft man den Ring im Uhrzeigersinn, so ergibt sich die jeweils nächste Zahl durch Addition
von 1 (und Weglassen des Übertrags beim Übergang von 111 zu 000), umgekehrt entspricht die Subtraktion von jeweils 1 dem Durchlauf entgegen dem Uhrzeigersinn. In dieser Interpretation sind die
Überlauffehler ganz natürlich erklärbar. Sie werden auch durch die gängigen Java Laufzeitumgebungen nicht abgefangen.
12.3
Darstellung reeller Zahlen
Bei der Darstellung von reellen Zahlen unterscheidet man zwei Möglichkeiten, Festkommadarstellung
(fixed point representation) und Gleitkommadarstellung (floating point representation).
1 Der genaue mathematische Hintergrund hierfür wird in der Algebra geliefert. Der Bereich −2n−1 ≤ x ≤ 2n−1 − 1 bildet
einen sogenannten Restklassenring modulo 2n−1 .
12.3. DARSTELLUNG REELLER ZAHLEN
12.3. DARSTELLUNG REELLER ZAHLEN
293
305
000
111
−1
−1 110
001
0
1
−2
2
−3
010
+1
3
−4
101
011
100
Abbildung 12.1: Ringdarstellung der Binärzahlen im Zweierkomplement.
Abbildung 12.1: Ringdarstellung der Binärzahlen im Zweierkomplement.
12.3
12.3.1
Darstellung reeller Zahlen
Festkommazahlen
Bei der Darstellung von reellen Zahlen unterscheidet man zwei Möglichkeiten, Festkomma-
Bei
der Festkommadarstellung
wird bei vorgegebener
Stellenzahl n eine
feste Stelle
erste Nachdarstellung
(fixed point representation)
und Gleitkommadarstellung
(floating
pointals
represenkommastelle
vereinbart.
Festkommazahlen
im
b-adischen
System
haben
also
die
Darstellung
tation).
x = (xk−1 xk−2 · · · x0 .y1 y2 · · · yn−k )b
12.3.1 Festkommazahlen
mit k Vorkomma- und n − k Nachkommastellen. Der Zahlenwert von x ergibt sich zu
Bei der Festkommadarstellung wird bei vorgegebener Stellenzahl n eine feste Stelle als erste
k−1
n−k
Nachkommastelle vereinbart. Festkommazahlen
System haben also die Dar−j
x = ∑ xi bi + im
jb .
∑ yb-adischen
stellung
i=0
j=1
x = (xk−1 xk−2 · · · x0 .y1 y2 · · · yn−k )b
Beispiele sind:
mit k Vorkomma- und n − k Nachkommastellen. Der Zahlenwert von x ergibt sich zu
(271.314)10 = 271, 314
k−1
n−k
!
!
−j
2
1+
x
=
x
i
(101.011)2 = 1 · 2 + 0 · 2 + 1 · 2y0j b+ 0.· 2−1 + 1 · 2−2 + 1 · 2−3
i=0
j=1
1 1
= 4 + 1 + + = 5, 375
Beispiele sind:
4 8
(271.314)10 reicht
= 271,
314 aus, mit Festkommazahlen zu rechnen, z. B. bei ökonomischen
Für manche Anwendungen
es völlig
2
(101.011)
1 · diesen
2 + 0 ·Bereichen
21 + 1 · 20eingesetzte
+ 0 · 2−1 +Programmiersprachen
1 · 2−2 + 1 · 2−3
Anwendungen (EURO
Beträge).
wie COBOL
2 = In
1 1 dar.
stellen daher reelle Zahlen als=Festkommazahlen
4 + 1 + + = 5, 375
4
8
Im Gegensatz zur Darstellung von ganzen Zahlen können bereits bei der Konvertierung von Dezimalzahlen
in b-adische
Zahlensysteme
b 6= 10aus,
Probleme
auftreten. So ist zu
etwa
die Dezimalzahl
es völlig
mit Festkommazahlen
rechnen,
z. B. bei 0,8
Für manche
Anwendungen
reichtmit
alsökonomischen
binäre Festkommazahl
nur unendlich-periodisch
als
Anwendungen
(DM Beträge). In diesen
Bereichen eingesetzte Programmiersprachen wie COBOL stellen daher reelle Zahlen als Festkommazahlen dar.
0.810 = 0.11001100110011001100110011001100110011001100110011 . . .2
darstellbar.
306
KAPITEL 12. ZAHLENDARSTELLUNGEN UND RECHNERARITHMETIK
Der große Nachteil der Festkommazahlen besteht jedoch darin, dass (wie auch bei ganzen Zahlen) der
Bereich der darstellbaren Zahlen nach oben und unten stark beschränkt ist, und die Genauigkeit (der
Abstand zwischen zwei benachbarten Zahlen) überall gleich ist.
Dies führt zu großen Ungenauigkeiten bei wissenschaftlichen Rechnungen. Liegt etwa ein Rechenergebnis x zwischen der kleinsten (z1 ) und der zweitkleinsten (z2 ) positiven darstellbaren Zahl (etwa
x = z2 − z21 ), so muss x zur internen Darstellung auf eine der beiden Zahlen z1 , z2 gerundet werden.
Der dabei entstehende relative Fehler ist (bei Rundung auf z1 )
1
z1 1
x − z1
= 23 = ,
x
3
2 z1
also ungefähr 33%. Dies ist für wissenschaftlich-numerische Rechnungen völlig inakzeptabel. Aus
diesem Grunde verwendet man für solche Rechnungen die Gleitkommadarstellung.
12.3.2
Gleitkommazahlen
Gleitkommazahlen haben die Form
z = ±m · b±e .
Dabei heißt m Mantisse und e Exponent, b ist die Basis für den Exponenten. Die Basis der Mantisse
kann dabei von der Basis b des Exponenten verschieden sein.2 Wir werden hier jedoch die gleiche
Basis b voraussetzen. Beispiele sind:
−213, 78 = −2.1378 · 102
0, 000031 = 0.31 · 10−4 = 3.1 · 10−5
(1101.011)2 = 1.101011 · 23
Die Beispiele zeigen, dass die Gleitkommadarstellung nicht eindeutig ist, da ein “Austausch” zwischen Vorkommastellen und Exponent möglich ist. Um Eindeutigkeit für die rechnerinterne Darstellung zu bekommen, verwendet man die normalisierte Gleitkommadarstellung. Diese verlangt eine
Mantisse der Form
m = 0.m1 m2 · · · mt mit m1 6= 0,
oder, äquivalent dazu
1 ≤ m1 < b .
Bei der rechnerinternen Darstellung muss festgelegt werden, wieviele Stellen für die Mantisse, und
wieviele für den Exponenten zur Verfügung stehen. Dies resultiert in die Menge F der auf dem Rechner darstellbaren Maschinenzahlen. Wir kennzeichnen F durch
F = F(b,t, emin , emax ),
2 Oft
wird für die Mantisse die Basis 2 und für b eine Potenz von 2 gewählt, z. B. 26 = 64.
307
12.3. DARSTELLUNG REELLER ZAHLEN
wobei b die Basis (von Mantisse und Exponent), t die Anzahl der Stellen der Nachkommastellen der
Mantisse und emin ≤ e ≤ emax der Bereich des Exponenten ist. Es sind dann alle Zahlen x der Form
x = ±.m1 . . . mt · be mit emin ≤ e ≤ emax
darstellbar.
Beispiel 12.2 Für F = F(2, 3, −1, 1) ergeben sich folgende nichtnegative Zahlen, der Größe nach
geordnet.
0.000 · 20
= 0
= 0
0.100 · 2−1 = (1/2) · 1/2
= 4/16
−1
0.101 · 2
= (1/2 + 1/8) · 1/2
= 5/16
0.110 · 2−1 = (1/2 + 1/4) · 1/2
= 6/16
0.111 · 2−1 = (1/2 + 1/4 + 1/8) · 1/2 = 7/16
0.100 · 20
= (1/2) · 1
= 8/16
= (1/2 + 1/8) · 1
= 10/16
0.101 · 20
0.110 · 20
= (1/2 + 1/4) · 1
= 12/16
0
0.111 · 2
= (1/2 + 1/4 + 1/8) · 1
= 14/16
0.100 · 21
= (1/2) · 2
= 16/16
1
0.101 · 2
= (1/2 + 1/8) · 2
= 20/16
0.110 · 21
= (1/2 + 1/4) · 2
= 24/16
0.111 · 21
= (1/2 + 1/4 + 1/8) · 2
= 28/16
Auf der Zahlengeraden ergibt sich die in Abbildung 12.2 dargestellte Verteilung.
-
0
1 5 3 7 1
4 16 8 16 2
5
8
3
4
7
8
1
5
4
3
2
7
4
Abbildung 12.2: Nichtnegative Gleitkommazahlen aus F(2, 3, −1, 1).
Man sieht, dass der Abstand zwischen benachbarten Zahlen mit der Größe der Zahlen wächst. Ferner
erkennt man eine relativ große “Lücke” zwischen der 0 und der kleinsten positiven Zahl pmin . Sie
ergibt sich aus der Normalisierungsbedingung und ist deutlich größer als der Abstand zur zweitgrößten
positiven Zahl.
Der Grund dafür ist die erwünschte Kontrolle des Rundungsfehlers, der dadurch entsteht, dass NichtMaschinenzahlen durch Maschinenzahlen dargestellt werden müssen. Solche Fehler entstehen durch
Konvertierung (Eingabe einer Nicht-Maschinenzahl, z. B. x = (1.2)10 ; 0.101 · 21 = 5/4) oder durch
Rundung von Zwischenergebnissen auf eine Maschinenzahl (z. B. 0.100 · 21 + 0.110 · 2−1 = 1 + 3/8 ;
3/2 = 0.110 · 21 ). Der dabei entstehende Fehler wird im nächsten Abschnitt analysiert.
Da bei der Basis b = 2 das erste Bit der Mantisse wegen der Normalisierungsbedingung eindeutig
festliegt (m1 = 1), wird es oft nicht explizit dargestellt (hidden bit). In diesem Fall werden die t
Mantissenbits zur Darstellung von m2 . . . mt+1 genutzt, d. h. man erreicht eine höhere Genauigkeit.
Allerdings muss dann die Null besonders dargestellt werden, z. B. als Mantisse 0 mit Exponent emin −
1.
308
KAPITEL 12. ZAHLENDARSTELLUNGEN UND RECHNERARITHMETIK
Zur Darstellung der Exponenten verwendet man oft die Exzess- oder Bias-Darstellung. Die Exponenten werden dabei durch Addition des Exzesses |emin | + 1 in den Bereich 1 . . . emin + emax + 1 transformiert. Dies erleichtert den Vergleich von Exponenten.
Als konkretes Beispiel betrachten wir die Darstellung von double Zahlen in Java. Sie folgt dem sogenannten IEEE 754 Standard3 , der sich als de facto Standard für numerische Rechnungen durchgesetzt
hat.
Für die gesamte Zahl stehen 64 Bit zur Verfügung, davon 52 für die Mantisse (in hidden bit Darstellung), 11 für den Exponenten und 1 für das Vorzeichen. Die Basis für Mantisse und Exponent
ist 2. Mantissen werden in der Form m1 .m2 . . . mt+1 (dem sogenannten significand) dargestellt, wobei
m1 als hidden bit den Wert 1 hat. Der Bereich für die Exponenten ergibt sich durch emin = −1022
und emax = 1023. Auf den 11 Bit für den Exponenten e wird gemäß der Exzess-Darstellung der Wert
e0 = e + |emin | + 1 dargestellt, so dass sich der wirkliche Exponent als e = e0 − 1023 ergibt.
Die Zahl 0 wird dann durch das Bitmuster 000 . . . 000 repräsentiert, also durch die Zahl +1.000 . . . 000·
2emin −1 . Ein positiver Überlauf (POSITIVE INFINITY) erzeugt beim Exponenten das Bitmuster 11111111111,
entspricht also 21024 . Entsprechend stellt das Bitmuster 00000000000 im Exponenten mit einem positiven Signifikanden einen Underflow dar (kleiner als die kleinste darstellbare normalisierte Zahl)4 .
Als maximale darstellbare Zahl ergibt sich somit 1.7976931348623157 · 10308 , und als kleinste (normalisierte) darstellbare positive Zahl 2.2250738585072014 · 10−308 .
Die Bitmuster von double Zahlen lassen sich mit der Methode
public static native long doubleToLongBits( double value )
der Klasse Double erzeugen und (bis auf führende Nullen) mit der Methode
String toBinaryString( long y )
darstellen. Als konkretes Beispiel ergibt sich die genaue Belegung der Bits für die Zahl 10 zu
Vorzeichen +
Significand 1.25
z}|{
z
}|
{
0 10000000010
0100000000000000000000000000000000000000000000000000
|
{z
}
Exponent 3=1026−1023
Entsprechend ergibt sich für die Zahl −0.8 das (gerundete) Bitmuster
Vorzeichen −
Significand 1.59999999999999...
z}|{
z
}|
{
1 |01111111110
1001100110011001100110011001100110011001100110011010
{z
}
Exponent −1=1022−1023
3 IEEE (vgl. http://www.ieee.org) steht für The Institute of Electrical and Electronic Engineers, das als
überkuppelndes Organ für viele Vereine für unterschiedliche Ingenieurwissenschaften fungiert.
4 Hier werden im IEEE Standard noch weitere Unterscheidungen getroffen (denormalized), die in Java jedoch alle zum
Wert NaN (not a number) führen. Dadurch sind die Möglichkeiten für adäquate numerische Abhilfen in Java beschränkt,
so dass bei hohen Anforderungen an die numerische Genauigkeit besser andere Programmiersprachen (C, C++, Fortran)
verwendet werden sollten.
12.3. DARSTELLUNG REELLER ZAHLEN
12.3.3
309
Genauigkeit von Gleitkommadarstellungen
Wie bereits erläutert, erzwingt der begrenzte Vorrat von Maschinenzahlen bei der Konvertierung oder
Darstellung von Zwischenergebnissen die Rundung auf Maschinenzahlen und dadurch Rundungsfehler.
Den maximalen relativen Rundungsfehler nennt man die (relative) Rechnergenauigkeit. Die Stellen
der Mantisse nennt man die signifikanten Stellen, eine t-stellige Mantisse bezeichnet man auch als
t-stellige Arithmetik.
Wir berechnen jetzt die Rechnergenauigkeit für F = F(b,t, emin , emax ). Dabei betrachten wir zunächst
den relativen Rundungsfehler µC , der durch Abschneiden (Chopping) nicht signifikanter Stellen entsteht. Dies entspricht dem Runden zur betragskleineren Maschinenzahl.
Sei x > pmin und xc ∈ M die durch Abschneiden entstehende Zahl. Dann ist
µC =
=
<
≤
=
x − xc 0.x1 x2 . . . xt xt+1 xt+2 . . . · be − 0.x1 . . . xt · be
=
x
x
0.0 . . . 0xt+1 xt+2 . . . · be 0.xt+1 xt+2 . . . · b−t · be
=
x
x
b−t · be
da 0.xt+1 xt+2 . . . < b0 = 1
x
b−t · be
1
da x > 0.x1 · be ≥ be wegen der Normalisierung
1
e
b
b ·b
1
b−t · b = t−1 .
b
Der relative Rundungsfehler µR ist offenbar höchstens halb so groß wie der relative Abschneidefehler.
Also ergibt sich die relative Rechnergenauigkeit µR als
1
1 1
µR = µC = · t−1 .
2
2 b
Diese Zahl ist die wichtigste Größe bei Genauigkeitsbetrachtungen für ein Gleitkommasystem und
Grundlage aller Fehlerabschätzungen in der Numerischen Mathematik.
Die Genauigkeit bezieht sich auf die Zahl t von signifikanten Stellen zur Basis b. Die entsprechende
Zahl s von signifikanten Stellen im Dezimalsystem erhält man durch Auflösung der Gleichung
µR =
1 1
1 1
=
t−1
2b
2 10s−1
nach s. Dies ergibt
s = b1 + (t − 1) log10 bc .
Umgekehrt berechnet man t aus einer gewünschten Anzahl s von dezimalen Stellen gemäß
t = b1 + (s − 1) log10 bc .
Bzgl. des in Java verwendeten IEEE Standards mit b = 2 und t = 53 (hidden bit!) ergeben sich s = 16
signifikante Dezimalstellen.
310
12.3.4
KAPITEL 12. ZAHLENDARSTELLUNGEN UND RECHNERARITHMETIK
Der Einfluss von Algorithmen auf die numerische Genauigkeit
In Kapitel 6.2.4 haben wir bereits ein Beispiel für die Auswirkung von Rundungsfehlern bei der
Lösung linearer Gleichungssysteme mit dem Gauß-Algorithmus kennen gelernt. Hier folgt ein weiteres Beispiel für die Lösung quadratischer Gleichungen.
Die quadratische Gleichung ax2 + bx + c = 0 hat die Lösungen
√
−b ± b2 − 4ac
x1,2 =
.
2a
Diese lassen sich nach dieser Formel berechnen durch
d := sqrt(sqr(b) − 4ac);
x1 := (d − b)/(2a);
x2 := −(b + d)/(2a);
wobei sqrt(x) =
√
x und sqr(b) = b2 als verfügbare Funktionen vorausgesetzt werden.
Ein numerisches Beispiel mit den Werten a = 1, b = −200 und c = 1, ausgeführt mit einer 4-stelligen
dezimalen Arithmetik (d. h. 4 Stellen für die Mantisse) ergibt folgende Resultate.
d = sqrt(sqr(−0.2000 · 103 ) − 4)
)
0.4000
· 105 {z
− 0.4000 · 10}1
|
0.4000 · 105 in 4-stelliger Arithmetik
= sqrt(
= 0.2000 · 103
Hieraus folgt
x1 = (0.2000 · 103 − (−0.2000 · 103 ))/(0.2000 · 101 )
= (0.4000 · 103 )/(0.2000 · 101 )
= 0.2000 · 103
= 200 ,
x2 = −(0.2000 · 103 + (−0.2000 · 103 ))/(0.2000 · 101 )
= 0/(0.2000 · 101 )
= 0.
Die exakten Werte mit 4-stelliger Arithmetik lauten jedoch
x1 = 200 und x2 = 0.005 .
Die 4-stellige Rechnerarithmetik hat die relative Rechnergenauigkeit µR = 12 · 1014−1 = 0, 0005. Die
Abweichung des errechneten Ergebnisses (0 anstelle des exakten Wertes 0,005) muss daher als völlig
inakzeptabel betrachtet werden. Das Ergebnis x2 = 0 ist schlicht falsch.
311
12.4. LITERATURHINWEISE
Eine Lösungsmethode, die die Gefahren der Gleitkomma-Arithmetik berücksichtigt, beruht auf der
Beziehung
c
x1 · x2 =
(Vieta) .
a
Es wird jetzt lediglich eine Lösung mit der üblichen Formel berechnet, und zwar die mit dem größten
Absolutwert. Die zweite Lösung errechnet man dann aus der Formel von Vieta. Dies ergibt das Programmstück:
d := sqrt(sqr(b) − 4ac);
if b ≥ 0 then x1 := −(b + d)/(2a)
else x1 := (d − b)/(2a);
x2 := c/(x1 · a);
Im Beispiel führt dies zu den Werten
d = 0.2000 · 103
(wie oben),
x1 = (d − b)/(2a) = 200
(wie oben),
x2 = 1/200 = 0.005 .
Dies ist ein Beispiel für den häufigen Fall, dass die üblichen mathematischen “Lösungsmethoden”
nicht unbesehen übernommen werden können, wenn mit wirklichen Rechnern gearbeitet werden soll.
Die Numerik ist der Zweig der Mathematik, der sich mit der Entwicklung von Lösungsmethoden
befasst, die die Tücken der Gleitkommaarithmetik berücksichtigen.
12.4
Literaturhinweise
Kapitel 12.1 und 12.2 folgen [OV98]. Das Beispiel der Lösung quadratischer Gleichungen in Kapitel 12.3.4
stammt aus [Wir78].
Als Einstieg in die Methoden der numerischen Mathematik sei auf [Ric93, Van85] verwiesen.
Herunterladen