1 und 0 ≤ z ≤ b

Werbung
mit
n−1
0 ≤ z0 ≤ b − 1 und 0 ≤ ẑ ≤ b
−1.
Nach Induktionsannahme besitzt ẑ eine Darstellung
ẑ = ẑn−2 · bn−2 + · · · + ẑ1 · b1 + ẑ0 · b0
der Länge n − 1 zur Basis b. Damit ist
n−2
1
0
z = (ẑn−2 · b
+ · · · + ẑ1 · b + ẑ0 · b ) · b
+ z0
n−1
2
1
0
= ẑn−2 · b
+ · · · + ẑ1 · b + ẑ0 · b + z0 · b
eine Basis-b-Darstellung der Länge n für z .
Besitzt z zwei solche Darstellungen,
n−1
1
0
z = zn−1 · b
+ · · · + z1 · b + z0 · b
′
= zn−1
· bn−1 + · · · + z1′ · b1 + z0′ · b0 ,
so muss Division durch b denselben Rest ergeben, also
′
z0 = z0 .
Damit müssen auch die Quotienten
z − z0
n−2
1
0
= zn−1 · b
+ · · · + z2 · b + z1 · b
b
und
z − z0′
′
= zn−1
· bn−2 + · · · + z2′ · b1 + z1′ · b0
b
33
übereinstimmen. Wegen
0≤
z − z0
n−1
≤b
−1
b
ist nach Induktionsannahme die Basis-b-Darstellung dieser Zahl eindeutig, also
z1 = z1′ ,
z2 = z2′ ,
... ,
′
zn−1 = zn−1
.
Damit ist auch die Darstellung von z eindeutig.
• Führende Nullen werden manchmal nicht notiert.
• Bei Bedarf wird die Basis tiefgestellt, z.B. 102213 .
• Der Beweis liefert auch eine Methode zur Bestimmung der
Basis-b-Darstellung von z :
– Rest der Division z/b ist die Ziffer z0.
– Übrige Ziffern aus der Basis-b-Darstellung des ganzzahligen Anteils von z/b.
(−→ Rekursion)
16 3 Beispiel: Bestimme Basis-8-Darstellung von z = 540710
( fünftausend vierhundert sieben“).
”
1. 5407 = 675 · 8 + 7, also z0 = 7
2. 675 = 84 · 8 + 3, also z1 = 3
34
3.
4.
5.
6.
7.
84 = 10 · 8 + 4, also z2 = 4
10 = 1 · 8 + 2, also z3 = 2
1 = 0 · 8 + 1, also z4 = 1
0 = 0 · 8 + 0, also z5 = 0
. . . (nur noch Nullen)
Damit: 540710 = 124378 .
Praktisch relevante Basen:
• b = 10 (Dezimaldarstellung) — im Alltag übliche Darstellung mit den Ziffern 0, . . . , 9:
540710
• b = 2 (Binär-/Dualdarstellung) — in Rechnern dominierende Repräsentation mit den Ziffern 0 und 1:
10101000111112
• b = 16 (Hexadezimaldarstellung) — leichter lesbare Alternative zur Binärdarstellung mit den Ziffern 0, . . . , 9, A
(= 10), B, C, D, E, F (= 15):
151F16
• b = 8 (Oktaldarstellung) — Alternative zur Binärdarstellung mit den Ziffern 0, . . . , 7:
124378
35
17 3 Bemerkung: Die Hexadezimal-/Oktaldarstellung erhält man
aus der Binärdarstellung, indem man von hinten her jeweils 4
bzw. 3 Binärziffern zu einer Hexadezimal-/Oktalziffer zusammenfasst.
1 0101 0001 11112 = 151F16
1 010 100 011 1112 = 124378
(Bei Bedarf sind in der Binärdarstellung führende Nullen zu
ergänzen.)
Umgekehrt ergibt jede Hexadezimal-/Oktalziffer 4 bzw. 3
Ziffern in der Binärdarstellung.
• Der weitaus größte Teil der Rechnung in Computern erfolgt
im Binärsystem.
• Ältere IBM-Rechner verwenden intern Hexadezimaldarstellung.
• In kaufmännischen Anwendungen wird oft dezimal gerechnet
— dann meist in BCD-Darstellung (binary coded decimals), d.h. jede Dezimalziffer wird mit 4 Binärziffern dargestellt:
4735210 =
b 0100 0111 0011 0101 0010BCD
36
3.2.4
Rechnen in anderen Basen
Ziffernweise Addition und Multiplikation wie in der Grundschule
• Übertrag zur links benachbarten Ziffer, wenn Zwischenergebnis ≥ b.
• Multiplikation in Basis 2 ist besonders einfach, da das kleine
”
Einmaleins“ trivial ist:
× 0 1
0 0 0
1 0 1
18 3 Beispiele:
a) Addition in Basis 2 [ 7810 + 5910 = 13710 ]
1 0 0 1 1 1 0
+ 0 1 1 1 0 1 1
Übertrag
1
1
1
1
1
1
1 0 0 0 1 0 0 1
b) Multiplikation in Basis 2 [ 1310 × 910 = 11710 ]
1 1 0 1 × 1 0 0 1
1 1 0 1
0
0
1 1 0 1
1
1 1 1 0 1 0 1
37
3.2.5
Binärdarstellung negativer Zahlen
Problem: Vorzeichen muss irgendwie dargestellt werden.
Explizite Speicherung des Vorzeichens: Vorzeichen kann mit einer zusätzlichen Binärziffer dargestellt werden (z.B. +“ durch
”
0, -“ durch 1 — oder umgekehrt), also bei insgesamt 8 bit
”
+2510 =
b 00011001
−2510 =
b 10011001
⊕ Leicht zu verstehen
⊖ Arithmetik mit negativen Zahlen wird aufwändiger (Fallunterscheidung positiv“/ negativ“)
”
”
⊖ Zwei Darstellungen für die Null:
+0=
b 000 . . . 0 und
• Mit n bit darstellbare Zahlen:
n−1
−(2
−0=
b 100 . . . 0
n−1
− 1), . . . , +2
38
−1
Einerkomplementdarstellung: Bei negativen Zahlen wird jedes bit
invertiert (0 ↔ 1), also bei insgesamt 8 bit
+2510 =
b 00011001
−2510 =
b 00011001 = 11100110
⊖ Zwei Darstellungen für die Null:
+0=
b 000 . . . 0 und
• Mit n bit darstellbare Zahlen:
n−1
−(2
−0=
b 111 . . . 1
n−1
− 1), . . . , +2
−1
⊕ Arithmetik mit negativen Zahlen wird relativ einfach
(siehe folgendes Beispiel 19 und Bemerkung 20).
19 3 Beispiel: Addition von −3710 =
b 00100101 = 11011010
und +2410 =
b 00011000:
1 1 0 1 1 0 1 0
0 0 0 1 1 0 0 0
1
1
1 1 1 1 0 0 1 0
Dies ist gerade die Darstellung von 00001101 =
b − 1310 .
Addition von +3710 =
b 00100101 und −2410 =
b 00011000
= 11100111:
39
0 0 1 0 0 1 0 1
1 1 1 0 0 1 1 1
1
1
1
1
1
1
1 0 0 0 0 1 1 0 0
Weglassen der (neu hinzugekommenen) führenden 1 ergibt
00001100 =
b 1210 statt 13.
Addition von −3710 =
b 11011010 und −2410 =
b 11100111:
1 1 0 1 1 0 1 0
1 1 1 0 0 1 1 1
1
1
1
1
1 1 1 0 0 0 0 0 1
Weglassen der (neu hinzugekommenen) führenden 1 ergibt
b − 6210 statt −61.
11000001 = 00111110 =
Systematik ?
20 3 Bemerkung: Invertierung einer binären Ziffer zk bedeutet
Ersetzen durch 1 − zk . Also:
Ist 0 ≤ z ≤ 2n−1 − 1 mit n-stelliger Binärdarstellung
n−1
z = 0·2
n−2
+ zn−2 · 2
1
so besitzt −z die Darstellung
−z = 1 · 2n−1 + (1 − zn−2) · 2n−2 + · · ·
1
0
+ (1 − z1 ) · 2 + (1 − z0) · 2
40
0
+ · · · + z1 · 2 + z0 · 2 ,
= (2n−1 + 2n−2 + · · · + 21 + 20)
n−2
1
0
− (zn−2 · 2
+ · · · + z1 · 2 + z0 · 2 )
= 2n − 1 − z ∈ {2n−1, . . . , 2n − 1} .
• Addiert man die Einerkomplement-Darstellungen einer
positiven Zahl x und einer negativen Zahl y wie gewöhnliche Binärzahlen, so erhält man die Binärdarstellung von
x + y + 2n − 1.
– Für x + y ≤ 0 ist x + y + 2n − 1 gerade die
Einerkomplementdarstellung des korrekten Resultats
x + y.
– Für x+y > 0 ist x+y +2n −1 ≥ 2n und enthält
damit eine führende Eins an Position n. Lässt man
diese weg, so erhält man x + y − 1(≥ 0), also ein
um 1 zu kleines Ergebnis.
• Addiert man die Einerkomplemente zweier Zahlen x, y
≤ 0 mit −(2n−1 − 1) ≤ x + y (≤ 0) — d.h. die
Summe ist im Einerkomplement darstellbar —, so erhält
man
n
n
(2 − 1 + x) + (2 − 1 + y)
= 2n + (x + y + 2n − 1) − 1 .
Diese Binärzahl hat eine führende Eins an Position n.
Lässt man sie weg, so erhält man (x + y + 2n − 1) − 1,
also wieder ein um 1 zu kleines Ergebnis (die korrekte
Einerkomplement-Darstellung ist x + y + 2n − 1).
Frage: Kann man die um 1 zu kleinen Ergebnisse berichtigen ?
41
Zweierkomplementdarstellung: Bei negativen Zahlen wird jedes
bit invertiert und anschließend 1 addiert, also bei insgesamt
8 bit
−2510 =
b 00011001 + 00000001
= 11100110 + 00000001
= 11100111
⊕ Eindeutige Darstellung für die Null:
−0 =
b
=
=
=
b
000 . . . 00 + 000 . . . 01
111 . . . 11 + 000 . . . 01
1 | 000 . . . 00
(neue führende Eins)
+0
• Mit n bit darstellbare Zahlen:
n−1
−2
n−1
, . . . , +2
−1
⊕ Bei der Arithmetik kein Unterschied zwischen positiven
und negativen Zahlen (siehe folgendes Beispiel 21).
21 3 Beispiel: Addition von −3710 =
b 00100101+00000001 =
11011011 und +2410 =
b 00011000:
1 1 0 1 1 0 1 1
0 0 0 1 1 0 0 0
1
1
1 1 1 1 0 0 1 1
42
Dies ist gerade die Darstellung von −1310 =
b 00001101 +
00000001
Addition von +3710 =
b 00100101 und −2410 =
b 00011000
+ 00000001 = 11101000:
0 0 1 0 0 1 0 1
1 1 1 0 1 0 0 0
1
1
1
1 0 0 0 0 1 1 0 1
Weglassen der (neu hinzugekommenen) führenden 1 ergibt
00001101 =
b 1310 .
Addition von −3710 =
b 11011011 und −2410 =
b 11101000:
1 1 0 1 1 0 1 1
1 1 1 0 1 0 0 0
1
1
1
1
1
1 1 1 0 0 0 0 1 1
Weglassen der (neu hinzugekommenen) führenden 1 ergibt
11000011 = 00111101 + 00000001 =
b − 6110 .
In allen Fällen richtiges Ergebnis !
22 3 Bemerkung: Die Darstellung einer negativen Zahl x mit
−2n−1 ≤ x < 0 mit n Ziffern im Zweierkomplement ist
identisch mit der gewöhnlichen Binärdarstellung der positiven
Zahl x + 2n .
43
23 3 Bemerkung: Die Darstellung einer Zahl im Zweierkomplement mit m ≥ n Ziffern erhält man aus der mit n Ziffern
dadurch, dass man die vorderen m − n Plätze alle mit dem
(bisher) führenden bit auffüllt.
44
3.2.6
Überlauf
Wir gehen davon aus, dass die Zahlen im Zweierkomplement dargestellt werden.
24 3 Beispiel: Addition von 9710 =
b 01100001 und 4210 =
b 0010
1010 bei insgesamt 8 Binärstellen:
0 1 1 0 0 0 0 1
0 0 1 0 1 0 1 0
1
1
1 0 0 0 1 0 1 1
Dies ist die Darstellung von −11710 (= 97 + 42 − 28).
Zweierkomplement-Addition von −9710 =
b 10011111 und
−4210 =
b 11010110:
1 0 0 1 1 1 1 1
1 1 0 1 0 1 1 0
1
1
1
1
1
1 0 1 1 1 0 1 0 1
Dies ist die Darstellung von +11710 (= −97 − 42 + 28).
Ursache: Ergebnis liegt außerhalb des darstellbaren Zahlenbereichs
−2n−1, . . . , 2n−1 − 1.
45
25 3 Definition: Das Überschreiten des Bereichs darstellbarer
Zahlen wird als Überlauf (overflow) bezeichnet.
Bei ganzen Zahlen führt ein Überlauf meist (z.B. im Zweierkomplement) zu einem sog. wrap-around, d.h. bei n-stelliger Darstellung
ist das Resultat um 2n zu groß oder zu klein.
26 3 Satz: Tritt kein Überlauf ein, so ist das Ergebnis der übli”
chen“ Addition der n-stelligen Zweierkomplement-Darstellungen zweier Zahlen die Darstellung des Ergebnisses im Zweierkomplement. Dabei ist eine evtl. durch Übertrag neu auftretende Eins an Position n zu vernachlässigen.
Beweis: Sei z = x + y . Es ist −2n−1 ≤ x, y ≤ 2n−1 − 1. Weil
kein Überlauf eintritt, ist auch −2n−1 ≤ z ≤ 2n−1 − 1.
Fall 1: x ≥ 0, y ≥ 0.
Dann wird sowieso ’normal’ gerechnet.
Fall 2: x < 0, y ≥ 0, z ≥ 0.
Dann wird x dargestellt durch 2n + x, die Addition der
Darstellungen ergibt 2n + x + y = 2n + z mit z ≥ 0.
Also ist durch Übertrag eine führende Eins an Position
n aufgetreten, die vernachlässigt wird. Man hat statt
2n + z also z , die Zweierkomplement-Darstellung von
z ≥ 0.
46
Fall 3: x < 0, y ≥ 0, z < 0.
Wieder wird x dargestellt durch 2n + x, die Addition
der Darstellungen ergibt 2n + x + y = 2n + z mit
z < 0. Dies ist die Zweierkomplement-Darstellung der
negativen Zahl z .
Fall 4: x < 0, y < 0.
Dann wird x dargestellt durch 2n + x, y durch 2n + y .
Die Addition der Darstellungen ergibt 2n+1 + x + y =
2n + 2n + z . Weil Überlauf ausgeschlossen wurde, ist
−2n−1 ≤ z < −1 und damit 2n−1 ≤ 2n + z <
2n − 1. In 2n + (2n + z) steht also eine führende
Eins an Position n, die vernachlässigt wird. Man erhält
deshalb statt 2n + (2n + z) die Zahl 2n + z , die
Zweierkomplement-Darstellung von z < 0.
27 3 Bemerkung: Bei der Steuerung der Ariane 5 wurde die gemessene horizontale Geschwindigkeit in eine 16-stellige (ganze) Binärzahl umgewandelt. Da das Ergebnis aber größer war
als 215 − 1 = 32767, ergab sich ein Überlauf, der letztlich
die Selbstzerstörung der Rakete und des Satelliten zur Folge
hatte.
Schaden: ca. 500 Millionen $.
47
3.2.7
Ganzzahl-Arithmetik und Shifts
Ausgangspunkt: Zahlen sind mit n Zifferen im Zweierkomplement
dargestellt.
n−1
n−p
z = zn−1 · 2
+ · · · + zn−p · 2
+ zn−p−1 · 2n−p−1 + · · · + z1 · 21 + z0 · 20
=
b zn−1 . . . zn−p zn−p−1 . . . z1z0
{z
}|
{z
}
|
p
n−p
Multiplikation von z mit einer Zweierpotenz 2p ergibt
2p · z = zn−1 · 2n−1+p + · · · + zn−p · 2n |
n−1
p
+ zn−p+1 · 2
+ · · · + z0 · 2
p−1
0
+0·2
+ ··· + 0 · 2
...0
=
b zn−p+1 . . . z1z0 0
{z
} | {z }
|
p
n−p
Die Ziffern zn, . . . , zn−p fallen weg. War eine davon 1, so ist ein
Überlauf eingetreten.
28 3 Korollar: Tritt kein Überlauf ein, so entspricht die Multiplikation einer nichtnegativen Binärzahl z mit einer Zweierpotenz
2p dem Verschieben der Ziffern um p Positionen nach links
und Auffüllen mit p Nullen von rechts. Die ersten p Ziffern
von z fallen weg.
48
Ist z negativ, so ist die Zweierkomplement-Darstellung von z identisch mit der Binärdarstellung der positiven Zahl z+2n. Verschieben
der Ziffern um p nach links und Auffüllen mit p Nullen von rechts
liefert daher die Binärdarstellung von 2p · (z + 2n) = 2p · z + 2n+p,
also die Darstellung von 2p · z im Zweierkomplement mit n + p
Ziffern.
• Sind die Ziffern zn−p, . . . , zn alle 1 und lässt man sie nun
weg, so erhält man nach Bem.23 die ZweierkomplementDarstellung von 2p · z mit n Ziffern.
• Sind die Ziffern zn−p, . . . , zp nicht alle gleich 1, so ist
2p · z < −2n−1, d.h. es ist ein Überlauf eingetreten.
Also:
29 3 Korollar: Korollar 28 gilt auch für die Multiplikation einer
(im Zweierkomplement dargstellten) negativen Zahl mit einer
Zweierpotenz.
30 3 Definition: Das Verschieben der bits um p Positionen nach
links (rechts) mit Auffüllen durch Nullen heißt bitweiser
(Links-/Rechts-) Shift um p Positionen.
49
Division einer nicht-negativen n-stelligen ganzen Zahl
z = zn−1 · 2n−1 + · · · + zp · 2p
p−1
1
0
+ zp−1 · 2
+ · · · + z1 · 2 + z0 · 2
=
b zn−1 . . . zp zp−1 . . . z1z0
| {z } |
{z
}
p
n−p
durch eine Zweierpotenz 2p ergibt
p
z/2
n−1−p
0
= zn−1 · 2
+ · · · + zp · 2 ,
Rest: zp−1 · 2p−1 + · · · + z0 · 20
=
b 0
. . 0} zn−1 . . . zp+1zp ,
| .{z
{z
}
|
p
n−p
Rest: zp−1 . . . z0
31 3 Korollar: Die Division einer nichtnegativen Binärzahl z durch
eine Zweierpotenz 2p entspricht dem Verschieben der Ziffern
um p Positionen nach rechts und Auffüllen mit p Nullen von
links. Die letzten p Ziffern von z ergeben den Rest bei der
Division.
50
32 3 Bemerkung: Bei der Division einer negativen Binärzahl z im
Zweierkomplement durch eine Zweierpotenz 2p erhält man
den in {0, . . . , 2p − 1} liegenden Rest aus den letzten
p Ziffern von z , den ganzzahligen Anteil von z/2p durch
Verschieben der Ziffern um p Positionen nach rechts und
Auffüllen mit p Einsen von links.
(ohne Beweis)
33 3 Definition: Das Verschieben der bits um p Positionen nach
rechts mit Auffüllen durch das bisherige höchstwertige bit
heißt arithmetischer (Rechts-) Shift um p Positionen.
51
34 3 Beispiele:
Die Zahl z = 111110 besitzt die 16-stellige Binärdarstellung
z =
b 0000 0100 0101 0111, im Zweierkomplement ist −z =
b
1111 1011 1010 1001.
• 23 · z = 888810 =
b 0010 0010 1011 1000
• 23 · (−z) = −888810 =
b 1101 1101 0100 1000
• z/23 = 13810 =
b 0000 0000 1000 1010, Rest 710 =
b 111
• (−z)/23 = −13910 =
b 1111 1111 0111 0101,
Rest 110 =
b 001
(Es ist −z = (−139) · 8 + 1).
52
3.2.8
Fixkomma-Darstellung nicht-ganzer Zahlen
35 3 Definition: Bei Fixkomma-Zahlen (fixed point numbers)
wird die Basis-b-Darstellung um eine feste Anzahl von Nachkommastellen erweitert:
z = zn−1 · bn−1 + · · · + z0 · b0
−1
−m
+ z−1 · b + · · · + z−m · b
=: zn−1 . . . z0.z−1 . . . z−m
Darstellbare Zahlen (bei Zweierkomplement-Darstellung zur Basis
b = 2):
−2n−1, −2n−1 + 2−m, . . . , 2n−1 − 2−m
mit konstantem Abstand 2−m.
Rechnen mit Fixkomma-Zahlen: So wie mit (n + m)-stelligen
ganzen Zahlen, aber
Multiplikation und Division erfordern weitere Maßnahmen
(siehe nachfolgende Beispiele 36).
53
36 3 Beispiele:
a) Kaufmännische Rechnung mit Euro und Cent:
6 623,51
+ 1 059,76
− 230,50
7 452,77
b) Insgesamt 8-stellige (5+ 3) Zweierkomplement-Addition von
b 01011.101 und −4 34 =
b 00100.110+00000.001 =
11 58 =
11011.010:
0 1 0 1 1 1 0 1
1 1 0 1 1 0 1 0
1
1
1
1
1 0 0 1 1 0 1 1 1
Dies ist gerade die Darstellung des korrekten Ergebnisses 6 78 .
c) Dezimale Multiplikation von 43.21 = 4321/100 mit
12.34 = 1234/100 bei m = 2 Nachkommastellen:
4 3 2 1 ×
4 3 2
8 6
1 2
1
5 3 3
1
1
4
9
7
2
2 3 4
2
6 3
2 8 4
1 1 4
Das Ergebnis 5332114/10000 = 533.2114 ist bei m = 2
nicht exakt darstellbar und muss auf eine darstellbare Zahl
(z.B. 533.21) gerundet werden.
54
d) Dezimale Division von 1.50 = 150/100 durch 1.10 =
110/100 bei m = 2:
1 5 0
1 1 0
4 0
3 3
7
6
/ 1 1 0 = 1 3 6 3 6 ...
0
0
0
6
4
3
0
0
0
3
7
6
0
0
0 0
6 0
· · ·
Das exakte Ergebnis 1.363636 . . . = 1 36
99 hat eine unendliche Dezimaldarstellung und muss gerundet werden (z.B. auf
1.36).
37 3 Bemerkungen:
a) Addition und Subtraktion von Fixkommazahlen liefern stets
das exakte Ergebnis (sofern kein Überlauf auftritt), Multiplikation und Division sind i. Allg. mit Rundungsfehlern
behaftet.
55
b) Die Anhäufung von Rundungsfehlern in einem FixkommaZähler für die Zeit war verantwortlich dafür, dass am 25.
2. 1991 im Golfkrieg eine Scud-Rakete von einer PatriotAbwehrrakete verfehlt wurde (28 Tote)
• Uhr der Patriot liefert Zeit seit Einschalten in Zehntelsekunden
• Umrechnung in Sekunden mit 23 binären Nachkommastellen erforderte Rundung der Zahl
1
=
b 0.000110011001100110011001100110 . . .
10
≈ 0.00011001100110011001100
mit einem Rundungsfehler von ca. 0.00000009510
• Jede Zehntelsekunde wird dieser Wert zum Zähler addiert
• Nach 100 Stunden Dauerbetrieb erhöhte sich dadurch
der Fehler im Zeitzähler auf
100 × 60 × 60 × 10 × 0.000000095 ≈ 0.34
• In 0.34 Sekunden fliegt eine Scud ca. 600 m und kann so
den vom Patriot-System überwachten Bereich verlassen
56
3.2.9
Gleitkomma-Darstellung nichtganzer Zahlen
Gleitkomma-Zahlen (floating-point numbers) besitzen die Form
−1
1−m
z = ±(z0 + z−1 · b + . . . z1−m · b
=: ±z0.z−1 . . . z1−m × be
e
)·b
mit zk ∈ {0, . . . b − 1} und emin ≤ e ≤ emax .
Dabei heißt z0.z−1 . . . z1−m der Signifikand (früher meist Mantisse) und e der Exponent der Zahl z .
b heißt die Basis, m die Signifikandenlänge (oder Mantissenlänge) und {emin , . . . , emax } der Exponentenbereich der
Gleitkomma-Darstellung.
38 3 Beispiel: b = 10, m = 3, emin = −3, emax = 1
• 1.5 = 1.50 × 100 = 0.15 × 101 , d.h. die Darstellung
ist i. Allg. nicht eindeutig.
• −0.00150 = −1.50 × 10−3 = −0.15 × 10−2
• 150 (= 1.50 × 102 ) ist nicht darstellbar
• 1.501 ist ebenfalls nicht (exakt) darstellbar und muss
(z.B. auf 1.50 × 100) gerundet werden.
39 3 Definition: Eine Gleitkomma-Zahl ±z0.z−1 . . . z1−m × be
heißt normalisiert, wenn z0 6= 0. Eine Gleitkomma-Zahl
z 6= 0 mit z0 = 0 heißt denormalisiert.
57
40 3 Beispiel: b = 2, m = 3, emin = −2, emax = 1
Normalisierte Zahlen:
±1.00 · 2−2
±1.01 · 2−2
±1.10 · 2−2
±1.11 · 2−2
±1.00 · 2−1
±1.01 · 2−1
±1.10 · 2−1
±1.11 · 2−1
=
=
=
=
=
=
=
=
±1.00 · 20
±1.01 · 20
±1.10 · 20
±1.11 · 20
±1.00 · 21
±1.01 · 21
±1.10 · 21
±1.11 · 21
±0.25
±0.3125
±0.375
±0.4375
=
=
=
=
±0.5
±0.625
±0.75
±0.875
=
=
=
=
±1
±1.25
±1.5
±1.75
±2
±2.5
±3
±3.5
9
>
>
>
=
Abstand 2−4 = 0.0625
>
>
>
;
9
>
>
>
=
Abstand 2−3 = 0.125
>
>
>
;
9
>
>
>
=
Abstand 2−2 = 0.25
>
>
>
;
9
>
>
>
=
Abstand 2−1 = 0.5
>
>
>
;
Denormalisierte Zahlen:
9
±0.01 · 2
= ±0.0626 >
=
−2
±0.10 · 2
= ±0.125
>
±0.11 · 2−2 = ±0.1875 ;
−2
Abstand 2−4 = 0.0625
Null: 0
−3
−2
−1
0
1
2
3
-
58
• Für festes b, m, emin , emax gibt es nur endlich viele
Gleitkomma-Zahlen
⇒ nahezu alle reellen (sogar rationalen) Zahlen müssen auf
eine Gleitkomma-Zahl gerundet werden.
• Die normalisierte Gleitkomma-Darstellung einer Zahl ist,
wenn sie überhaupt existiert, eindeutig.
• Die Addition von Gleitkomma-Zahlen erfolgt i. Allg. in mehreren Schritten (hier für b = 10 und m = 4 am Beispiel
von x = 10.34 =
b 1.034 × 101 und y = −0.5432 =
b −
5.432 × 10−1):
1) Exponentenabgleich: Damit die Signifikanden addiert
werden können, müssen die Exponenten übereinstimmen:
y = −0.05432 × 101
2) Addition der Signifikanden:
1.034 × 101
−0.05432 × 101
0.97968 × 101
3) Normalisierung und Rundung des Ergebnisses:
0
x + y = 9.797 × 10
⊖ Im Gegensatz zur Fixkomma-Darstellung treten i. Allg. auch
bei Addition und Subtraktion Rundungsfehler auf.
59
⊕ I. Allg. sind wesentlich kleinere und wesentlich größere Zahlen
darstellbar als bei Fixkomma.
– Größte darstellbare Zahl: z0 = . . . = z1−m = b − 1,
e = emax
„
«
1
e
+1
e
+1
zmax = 1 − m · b max ≈ b max
b
– Kleinste positive normalisierte Zahl: z0 = 1, z−1 =
. . . = z1−m = 0, e = emin
N
zmin
= bemin
– Kleinste positive Zahl: z0 = . . . z2−m = 0, z1−m = 1,
e = emin
zmin = bemin +1−m
⊖ Mehrere Darstellungen für die Null möglich:
0 = ±0.0 . . . 0 × be
für emin ≤ e ≤ emax .
Keine dieser Darstellungen ist normalisiert.
Literatur:
• David Goldberg: What every computer scientist
should know about floating-point arithmetic. ACM
Computing Surveys 23(1), March 1991, pp. 5–48.
60
3.2.10
Der IEEE-Standard
Es gibt eigentlich zwei IEEE-Standards“ zu Gleitkomma-Forma”
ten:
• IEEE: IEEE standard for binary floating-point arithmetic. Technical Report IEEE Std 754-1985, The Institute of
Electrical and Electronics Engineers, Inc., New York, 1985.
für binäre Arithmetik
• IEEE: IEEE standard for radix-independent floating-point
arithmetic. Technical Report IEEE Std 854-1987, The Institute of Electrical and Electronics Engineers, Inc., New York,
1987.
für Basen 2 und 10
Wir werden im Folgenden hauptsächlich den Standard 754 betrachten. Er legt einheitliche Formate für die Codierung von binären
Gleitkomma-Zahlen fest:
Vorzeichen Exponentenfeld Nachkommastellen
Vorzeichen: Explizite Speicherung des Vorzeichens im vordersten
bit (0 =
b +“, 1 =
b −“)
”
”
Exponentenfeld enthält den verschobenen“ ( biased“) Exponen”
”
ten e − emin + 1 > 0. (Dadurch entsprechen kleinere Exponenten kleineren positiven Zahlen.)
Nachkommastellenfeld enthält den Signifikanden mit hidden bitTrick: Bei (de)normalisierten Gleitkomma-Zahlen ist immer
z0 = 1 (z0 = 0), muss also nicht abgespeichert werden. Für
Signifikandenlänge m werden also nur m − 1 bit benötigt.
61
Der IEEE-Standard sieht vier Genauigkeiten vor: single, singleextended, double und double-extended.
41 3 Bemerkung: Alle heutigen Prozessoren unterstützen zumindest die IEEE single- und double-Formate.
single double
Länge des Vorzeichenfelds
1
1
emin
−126 −1022
127
1023
emax
Länge des Exponentenfelds
8
11
24
53
Signifikandenlänge m
Gesamtlänge in bit
32
64
Zahlenbereich:
zmax
N
zmin
zmin
ε
single
1
) · 2128
(1 − 224
≈ 3.403 · 1038
2−126 ≈ 1.175 · 10−38
2−149 ≈ 1.401 · 10−45
2−23 ≈ 1.192 · 10−7
double
1
) · 21024
(1 − 253
≈ 1.798 · 10308
2−1022 ≈ 2.225 · 10−308
2−1074 ≈ 4.941 · 10−324
2−52 ≈ 2.220 · 10−16
Dabei ist ε der Abstand von 1 zur nächstgrößeren Zahl:
ε = min{z : z Gleitkomma-Zahl, z > 1} − 1
Dies bedeutet: Runden auf eine Gleitkomma-Zahl ergibt bei single
precision i. Allg. einen Fehler in der 7-ten, bei double precision in
der 16-ten Dezimalstelle.
62
Neben normalisierten und denormalisierten Zahlen (wie in Abschnitt 3.2.9) sieht der IEEE-Standard für jede Genauigkeit noch
• Null mit Vorzeichen
• zusätzliche spezielle Werte (∞ und NaN)
vor.
Sinn dieser Werte ist es, möglichst viel Information über die bisherige
Rechnung zu retten, wenn nicht mehr darstellbare Zahlen auftreten.
Unendlich (±∞): Dieser Wert entsteht, wenn das Ergebnis einer
Rechenoperation betragsmäßig größer als zmax wird (Überlauf), z.B. bei single precision
(1.01001 × 270 ) · (1.001 × 272) −→ +∞
70
72
(−1.01001 × 2 ) · (1.001 × 2 ) −→ −∞
Null mit Vorzeichen (signed zero): Entsteht etwa, wenn das Ergebnis einer Rechenoperation betragsmäßig kleiner als zmin
wird (Unterlauf), z.B. bei single precision
−70
(1.001 × 2
82
)/(1.10111 × 2 ) −→ +0
−1/(+∞) −→ −0
NaN ( not a number“): Entsteht, wenn eine Operation kein klar
”
definiertes Ergebnis liefert, z.B.
√
−2 −→ NaN
±0/(±0) −→ NaN
(+∞) − (+∞) −→ NaN
NaN ± z −→ NaN
63
Klassifikation der Zahlen mittels Exponent:
Exponent
Nachkommastellen
normalisierte Zahlen:
emin ≤ e ≤ emax
z−1 . . . z1−m
dargestellte Zahl
±1.z−1 . . . z1−m · 2e
denormalisierte Zahlen:
emin − 1
z−1 . . . z1−m 6= 0 ±0.z−1 . . . z1−m · 2emin
Null:
emin − 1
spezielle Werte:
emax + 1
emax + 1
z−1 . . . z1−m = 0
±0
z−1 . . . z1−m = 0
z−1 . . . z1−m 6= 0
±∞
NaN
64
Herunterladen