mit 0 ≤ z 0 ≤ b − 1 und 0 ≤ z ≤ b − 1 . Nach Induktionsannahme

Werbung
übereinstimmen. Wegen
mit
n−1
0 ≤ z0 ≤ b − 1 und 0 ≤ ẑ ≤ b
−1.
Nach Induktionsannahme besitzt ẑ eine Darstellung
n−2
ẑ = ẑn−2 · b
1
0
+ · · · + ẑ1 · b + ẑ0 · b
1
0
+ · · · + ẑ1 · b + ẑ0 · b ) · b
z = (ẑn−2 · b
+ z0
n−1
2
1
0
+ · · · + ẑ1 · b + ẑ0 · b + z0 · b
= ẑn−2 · b
eine Basis-b-Darstellung der Länge n für z .
1
z2 = z2′ ,
... ,
′
zn−1 = zn−1
.
Damit ist auch die Darstellung von z eindeutig.
• Führende Nullen werden manchmal nicht notiert.
Besitzt z zwei solche Darstellungen,
n−1
z − z0
n−1
≤b
−1
b
ist nach Induktionsannahme die Basis-b-Darstellung dieser Zahl eindeutig, also
z1 = z1′ ,
der Länge n − 1 zur Basis b. Damit ist
n−2
0≤
0
z = zn−1 · b
+ · · · + z1 · b + z0 · b
n−1
′
+ · · · + z1′ · b1 + z0′ · b0 ,
= zn−1 · b
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
• 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:
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
124378
35
36
3.2.4
Rechnen in anderen Basen
3.2.5
Ziffernweise Addition und Multiplikation wie in der Grundschule
Binärdarstellung negativer Zahlen
Problem: Vorzeichen muss irgendwie dargestellt werden.
• Ü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
+2510 =
b 00011001
−2510 =
b 10011001
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
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
”
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
⊕ 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
n−1
− 1), . . . , +2
1
1 1 1 0 1 0 1
37
−0=
b 100 . . . 0
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
0 0 1 0 0 1 0 1
1 1 1 0 0 1 1 1
1
1
1
− 1), . . . , +2
1
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 0 0 0 0 0 1
−1
⊕ Arithmetik mit negativen Zahlen wird relativ einfach
(siehe folgendes Beispiel 19 und Bemerkung 20).
1
1 0 0 0 0 1 1 0 0
1
n−1
1
Weglassen der (neu hinzugekommenen) führenden 1 ergibt
b − 6210 statt −61.
11000001 = 00111110 =
Systematik ?
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
b − 1310 .
Dies ist gerade die Darstellung von 00001101 =
Addition von +3710 =
b 00100101 und −2410 =
b 00011000
= 11100111:
39
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).
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
41
−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
Frage: Kann man die um 1 zu kleinen Ergebnisse berichtigen ?
n−1
, . . . , +2
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
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.
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
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
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.
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
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.
1
1 0 1 1 1 0 1 0 1
8
Dies ist die Darstellung von +11710 (= −97 − 42 + 2 ).
Ursache: Ergebnis liegt außerhalb des darstellbaren Zahlenbereichs
−2n−1, . . . , 2n−1 − 1.
45
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.
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
=
b zn−p+1 . . . z1z0 0
...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)
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
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
• (−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
36 3 Beispiele:
a) Kaufmännische Rechnung mit Euro und Cent:
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).
6 623,51
+ 1 059,76
− 230,50
7 452,77
b) Insgesamt 8-stellige (5+ 3) Zweierkomplement-Addition von
11 58 =
b 01011.101 und −4 43 =
b 00100.110+00000.001 =
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.
53
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
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
0
0
0 0
6 0
· · ·
36
hat eine unendliDas exakte Ergebnis 1.363636 . . . = 1 99
che Dezimaldarstellung und muss gerundet werden (z.B. auf
1.36).
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
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
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.
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 · 21
±1.01 · 21
±1.10 · 21
±1.11 · 21
1
• 1.5 = 1.50 × 10 = 0.15 × 10 , 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
=
=
=
=
±1.00 · 20
±1.01 · 20
±1.10 · 20
±1.11 · 20
38 3 Beispiel: b = 10, m = 3, emin = −3, emax = 1
0
=
=
=
=
±0.25
±0.3125
±0.375
±0.4375
=
=
=
=
±0.5
±0.625
±0.75
±0.875
9
>
>
>
=
Abstand 2−4 = 0.0625
>
>
>
;
9
>
>
>
=
Abstand 2−3 = 0.125
>
>
>
;
9
>
>
>
=
±1
±1.25
±1.5 >
>
>
;
±1.75
9
= ±2 >
>
>
=
= ±2.5
= ±3 >
>
>
;
= ±3.5
Abstand 2−2 = 0.25
Abstand 2−1 = 0.5
Denormalisierte Zahlen:
9
±0.01 · 2−2 = ±0.0626 >
=
±0.10 · 2−2 = ±0.125
>
±0.11 · 2−2 = ±0.1875 ;
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
⊕ I. Allg. sind wesentlich kleinere und wesentlich größere Zahlen
darstellbar als bei Fixkomma.
⇒ nahezu alle reellen (sogar rationalen) Zahlen müssen auf
eine Gleitkomma-Zahl gerundet werden.
– Größte darstellbare Zahl: z0 = . . . = z1−m = b − 1,
e = emax
«
„
1
e
+1
e
+1
zmax = 1 − m · b max ≈ b max
b
• 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:
– 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
1.034 × 101
−0.05432 × 101
0.97968 × 101
für emin ≤ e ≤ emax .
Keine dieser Darstellungen ist normalisiert.
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
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.
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
−126 −1022
emin
127
1023
emax
8
11
Länge des Exponentenfelds
24
53
Signifikandenlänge m
Gesamtlänge in bit
32
64
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:
Zahlenbereich:
zmax
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.)
N
zmin
zmin
ε
single
1
(1 − 224
) · 2128
≈ 3.403 · 1038
2−126 ≈ 1.175 · 10−38
2−149 ≈ 1.401 · 10−45
2−23 ≈ 1.192 · 10−7
double
1
(1 − 253
) · 21024
≈ 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
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.
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.
61
62
Neben normalisierten und denormalisierten Zahlen (wie in Abschnitt 3.2.9) sieht der IEEE-Standard für jede Genauigkeit noch
• Null mit Vorzeichen
Exponent
• 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
70
72
(1.01001 × 2 ) · (1.001 × 2 ) −→ +∞
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
Klassifikation der Zahlen mittels Exponent:
Nachkommastellen
normalisierte Zahlen:
emin ≤ e ≤ emax
z−1 . . . z1−m
±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
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
dargestellte Zahl
64
Herunterladen