Computerarithmetik
Computerarithmetik
Computerarithmetik
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Computerarithmetik</strong> (1)<br />
Fragen:<br />
• Wie werden Zahlen repräsentiert und konvertiert?<br />
• Wie werden negative Zahlen und Brüche repräsentiert?<br />
• Wie werden die Grundrechenarten ausgeführt?<br />
• Was ist, wenn das Ergebnis einer Operation größer ist als die größte darzustellende<br />
Zahl?<br />
Hauptunterschied zwischen Computer- und menschlicher Arithmetik:<br />
• Genauigkeit der sowie Platzbedarf für die Darstellung von Zahlen sind beim Computer<br />
endlich und begrenzt.<br />
• Computer arbeiten mit einer anderen Zahlendarstellung<br />
Rechner speichern die Information (Zahlen) in Einheiten festgesetzter Bitlänge,<br />
genannt Worte.<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (2)<br />
Mikroprozessor<br />
Wortlänge (Bits<br />
8085, Z80, 6809 8<br />
8086, 68000 16<br />
80386, 68020 32<br />
Pentium, PowerPC<br />
32<br />
(Sun SPARC, IBM AIX)<br />
typischer Mikrocontroller (4), 8, 16, (32)<br />
Cray-1 Supercomputer,<br />
Intel Itanium, AMD Opteron<br />
64<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (3)<br />
Beispiel für Zahlendarstellung mit unterschiedlichen Basen:<br />
binär<br />
1 1 1 1 1 0 1 0 0 0 1<br />
1 • 2 10 + 1 • 2 9 + 1 • 2 8 + 1 • 2 7 + 1 • 2 6 + 0 • 2 5 + 1 • 2 4 + 0 • 2 3 + 0 • 2 2 + 0 • 2 1 + 1 • 2 0<br />
1024 + 512 + 256 + 128 + 64 + 0 + 16 + 0 + 0 + 0 + 1<br />
oktal 3 7 2 1<br />
3 • 8 3 + 7 • 8 2 + 2 • 8 1 + 1 • 8 0<br />
1536 + 448 + 16 + 1<br />
dezimal 2 0 0 1<br />
2 • 10 3 + 0 • 10 2 + 0 • 10 1 + 1 • 10 0<br />
2000 + 0 + 0 + 1<br />
hexadezimal<br />
7 D 1<br />
7 • 16 2 + 13 • 16 1 + 1 • 16 0<br />
1792 + 208 + 1<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (4)<br />
Kollektion von Zahlendarstellungen mit den 4 verschiedenen Basen:<br />
dezimal binär oktal hexadezimal<br />
0<br />
1<br />
2<br />
3<br />
7<br />
8<br />
10<br />
11<br />
12<br />
15<br />
16<br />
20<br />
50<br />
60<br />
80<br />
100<br />
1000<br />
2989<br />
0<br />
1<br />
10<br />
11<br />
111<br />
1000<br />
1010<br />
1011<br />
1100<br />
1111<br />
10000<br />
10100<br />
110010<br />
111100<br />
1010000<br />
1100100<br />
1111101000<br />
101110101101<br />
0<br />
1<br />
2<br />
3<br />
7<br />
10<br />
12<br />
13<br />
14<br />
17<br />
20<br />
24<br />
62<br />
74<br />
120<br />
144<br />
1750<br />
5655<br />
0<br />
1<br />
2<br />
3<br />
7<br />
8<br />
A<br />
B<br />
C<br />
F<br />
10<br />
14<br />
32<br />
3C<br />
50<br />
64<br />
3E8<br />
BAD<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (5)<br />
Tabelle für Umwandlung<br />
binär - hexadezimal:<br />
Beispiel für Konversion einer<br />
Dezimalzahl in eine Binärzahl:<br />
Hexadezimal<br />
0<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
binär<br />
0000<br />
0001<br />
0010<br />
0011<br />
0100<br />
0101<br />
0110<br />
0111<br />
Hexadezimal<br />
8<br />
9<br />
a<br />
b<br />
c<br />
d<br />
e<br />
f<br />
binär<br />
1000<br />
1001<br />
1010<br />
1011<br />
1100<br />
1101<br />
1110<br />
1111<br />
Quotient<br />
1492<br />
746<br />
373<br />
186<br />
93<br />
46<br />
23<br />
11<br />
5<br />
2<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
1<br />
1<br />
0<br />
1<br />
Rest<br />
1 0 1 1 1 0 1 0 1 0 0<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (6)<br />
BCD (Binary Coded Decimal):<br />
weitere Möglichkeit der Zahlendarstellung auf der Basis von 2 Ziffern<br />
Prinzip:<br />
Jede Dezimalziffer wird für sich in die entsprechende Binärzahl konvertiert.<br />
Vorteil:<br />
sehr einfache Konvertierung von dezimaler zu binärer Darstellung<br />
Nachteile:<br />
– komplexere Arithmetik<br />
– verschwenderische (ineffiziente) Ausnutzung der zur Verfügung stehenden<br />
Wortbreite und damit des gesamten Speichers<br />
Konsequenz:<br />
Einsatz nur in Applikationen mit sehr geringem Speicherbedarf<br />
Beispiele:<br />
Taschenrechner, Digitaluhr<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (7)<br />
Darstellung ganzer Zahlen (signed numbers)<br />
1. Die Vorzeichen/Betrags - Darstellung (sign and magnitude):<br />
Das höchstgewichtete bit wird exclusiv für die Angabe des Vorzeichens genutzt.<br />
Sei S das Vorzeichenbit und M der Betrag (Größe) einer ganzen Zahl Z,<br />
dann ist ihr Wert gegeben durch:<br />
Z := 1<br />
( − ) S ⋅ M<br />
Der Wertebereich bei einem gegebenen n-bit-Wort liegt im Intervall<br />
[-(2 n-1 -1), 2 n-1 -1]<br />
Nachteile:<br />
– keine eindeutige Darstellung der Null (-0, +0)<br />
– erfordert separates Subtrahierwerk<br />
– erfordert zusätzliche Logik, um zu entscheiden, ob eine Addition oder eine<br />
Subtraktion durchzuführen ist<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (8)<br />
2. Die Komplement - Darstellung<br />
Komplement: „Ergänzung“<br />
Der negative Wert einer Zahl ist in der Zahl selbst enthalten<br />
• Das Vorzeichenbit ist Teil des Summanden und wird somit in eine<br />
arithmetische Operation mit eingeschlossen<br />
• Subtraktion wird auf die Addition zurückgeführt<br />
• Keine Notwendigkeit für ein zusätzliches Subtrahierwerk<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (9)<br />
2a. Einer - Komplement<br />
n<br />
b-1 - Komplement: + = −1<br />
n = Länge der Darstellung von z<br />
b = Basis<br />
z<br />
z<br />
b<br />
Das Einer - Komplement -N einer binären Zahl N aus [0 , 2 n-1 -1] erreicht man durch<br />
bitweises Invertieren von N<br />
-N aus [-0, -2 n-1 -1]<br />
-N = 2 n - N - 1<br />
Subtraktion:= Addition + end-around-carry, d.h. zu der Summe wird das „linke“ Bit<br />
der Summe aufaddiert.<br />
Vorteil:<br />
• zusätzliches Subtrahierwerk überflüssig<br />
Nachteile: • keine eindeutige Darstellung der Null (+0, -0)<br />
• kein echtes Komplement, da -x + x = 0<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (10)<br />
2b. Zweier - Komplement<br />
b - Komplement:<br />
z + z =<br />
n<br />
b<br />
n = Länge der Darstellung von z<br />
b = Basis<br />
Das Zweier - Komplement ist ein echtes Komplement<br />
• -N = 2 n - N<br />
• -N = Einer - Komplement + 1<br />
• -N = (bitweises Invertieren von N ) + 1<br />
• -N aus [-1, -2 n-1 ]<br />
• Es gibt eine eindeutige Darstellung der Null<br />
• Der Wertebereich des Zweier - Komplements ist [-2 n-1 , 2 n-1 -1]<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (11)<br />
Visualisierung des Zweier - Komplements sowie der Addition<br />
1111<br />
0000<br />
0001<br />
1110<br />
0010<br />
-1 0 +1<br />
1101 -2<br />
+2 0011<br />
-3<br />
+3<br />
1100 -4<br />
+4 0100<br />
-5<br />
+5<br />
1011 -6<br />
+6 0101<br />
-7 -8 +7<br />
1010<br />
0110<br />
1001 1000<br />
0111<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (12)<br />
Einfache Additions- (Subtraktions-) Regeln<br />
x+y:<br />
x-y:<br />
Addition der entsprechenden 2er - Komplemente ergibt korrekte Summe im<br />
2er - Komplement, solange der Wertebereich nicht überschritten wird.<br />
Bilde das 2er - Komplement von y und führe Addition wie oben aus.<br />
Konsequenz:<br />
Die logische Einfachheit und die daraus resultierende Geschwindigkeit (arithm.<br />
Operation erfolgt immer in einem Schritt) führt dazu, dass das Zweier - Komplement in<br />
den ALU´s moderner Rechner eingesetzt wird.<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (13)<br />
Overflow (Summe liegt außerhalb des Wertebereiches):<br />
Wichtig: Erkennung des Overflows<br />
• Bei vorzeichenloser Integer-Addition dient das carry-out-bit als Überlauf-Indikator.<br />
mit der Wortbreite nicht mehr darstellbarer Überrag<br />
• Bei Addition ganzer Zahlen (signed numbers) gilt dies nicht<br />
• Addition von Summanden mit unterschiedlichem Vorzeichen ergibt nie einen<br />
Overflow (Absoluter Wert ihrer Summe ist immer kleiner als der absolute Wert von<br />
einem der beiden Summanden)<br />
Folgerung: Overflow tritt auf, wenn beide Summanden das gleiche Vorzeichen haben<br />
Prüfung auf Overflow:<br />
O = a<br />
b<br />
s<br />
n− 1 n−1<br />
n−1+<br />
a<br />
n−1<br />
b<br />
n−1<br />
s<br />
n−1<br />
(Die Faktoren repräsentieren die Vorzeichenbits der Summanden a und b sowie der<br />
Summe s)<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (14)<br />
Wahrheitstabelle Halbaddierer:<br />
Symbol:<br />
A B S C Summe:<br />
A<br />
B<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
S = AB ∨ AB =<br />
(Exklusiv-Oder)<br />
Carry:<br />
A ⊕ B<br />
HA<br />
C =<br />
AB<br />
S<br />
C out<br />
Implementierung:<br />
A<br />
B<br />
1<br />
1<br />
&<br />
&<br />
≥1<br />
S<br />
A<br />
B<br />
≥1<br />
& 1<br />
&<br />
S<br />
A<br />
B<br />
&<br />
&<br />
&<br />
&<br />
S<br />
&<br />
C<br />
C<br />
1<br />
C<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (15)<br />
Wahrheitstabelle Volladdierer:<br />
A B C<br />
C in<br />
A B S<br />
C out<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
1<br />
HA 1<br />
C 1<br />
HA 2<br />
C 2<br />
S 2<br />
A<br />
B<br />
C in<br />
≥1<br />
Symbol:<br />
S<br />
FA<br />
C out<br />
C out<br />
S 1<br />
S<br />
Implementierung eines<br />
Volladdierers mittels<br />
zweier Halbaddierer<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (16)<br />
Schaltung für einen Volladdierers:<br />
A B C<br />
1<br />
1<br />
1<br />
&<br />
C<br />
B<br />
&<br />
&<br />
&<br />
≥1<br />
S<br />
A<br />
&<br />
&<br />
≥1<br />
C<br />
&<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (17)<br />
Serieller Addierer (SA):<br />
A Shift-Register<br />
Summen-Shift-Register<br />
B Shift-Register<br />
A<br />
B<br />
FA<br />
S<br />
C in<br />
C out<br />
Shift Takt<br />
Carry<br />
Flip Flop<br />
Q<br />
D<br />
C<br />
n Pulse pro Addition<br />
Paralleladdierer (RCA):<br />
A<br />
B<br />
C in A B<br />
C in<br />
C in A B A B<br />
C in<br />
Übertrag<br />
1. Ebene<br />
Übertrag<br />
C out<br />
FA<br />
S m-1<br />
FA<br />
FA<br />
FA<br />
C out<br />
S m-2 C out<br />
S 1<br />
C out<br />
S 0<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (18)<br />
Implementierung eines 4-Bit-Carry-Lookahead-Addierers<br />
x 3<br />
y 3 x 2 y 2 x 1<br />
y 1 x 0<br />
y 0<br />
c<br />
/<br />
c<br />
4 out<br />
p 3 g 2<br />
p 2 g 1 p 1<br />
g 0 p 0<br />
c0 / cin<br />
c 4<br />
c 3 c 2 c 1<br />
FA<br />
FA FA FA<br />
1 GLZ<br />
2 GLZ<br />
3 GLZ<br />
s 3 s 2<br />
s 1 s 0<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (19)<br />
Implementierung eines 4-Bit-Carry-Lookahead-Addierers<br />
Verkettung mehrerer<br />
Teiladdierer<br />
1<br />
y 1 … x 28<br />
y28 x 7<br />
y 7 … x 4<br />
y 4<br />
x 3<br />
y 3 … x 0<br />
y 0<br />
s 31<br />
… s 28 … s 4 … s 0<br />
x 3 3<br />
s 7<br />
s 3<br />
Resultierende Laufzeit<br />
s … s 0 3<br />
s … s 4 7<br />
…<br />
…<br />
s … s 28 31<br />
0<br />
…<br />
…<br />
1 2 3 4 5 6 7 8 15 17 20<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (20)<br />
Rechenzeit zur Addition zweier 32 Bit-Zahlen<br />
A) Serial Addier<br />
3 GLZ pro Additionsschritt<br />
(Mindestzeit, da Taktung entscheidend)<br />
32 * 3 GLZ = 96 GLZ<br />
B) Ripple Carry Adder (RCA)<br />
31 * 2 GLZ (Ripple Carry)<br />
1 * 3 GLZ (letzte Addition)<br />
= 62 GLZ<br />
= 3 GLZ<br />
65 GLZ<br />
C) 4-Bit Carry-Lookahead Adder (CLA)<br />
D) hierarchical Carry-Lookahead Adder<br />
Zusammenschaltung von 8 4-Bit CLA<br />
1 * 1 GLZ (g i und p i )<br />
8 * 2 GLZ (c 1 ... c 4 )<br />
1 * 3 GLZ (letzte Addition)<br />
= 1 GLZ<br />
= 16 GLZ<br />
= 3 GLZ<br />
20 GLZ<br />
CLA mit 8x 4-Bit CLA<br />
1 * 1 GLZ (g i und p i )<br />
1 * 2 GLZ (G i und P i )<br />
2 * 2 GLZ (C 1 ... C 4 )<br />
1 * 2 GLZ (c31)<br />
1 * 3 GLZ (letzte Addition)<br />
= 1 GLZ<br />
= 2 GLZ<br />
= 4 GLZ<br />
= 2 GLZ<br />
= 3 GLZ<br />
12 GLZ<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (21)<br />
Multiplikation<br />
1. Version einer Multiplikationshardware:<br />
64 Bit Multiplikand<br />
Linksshift<br />
64-Bit ALU<br />
Kontroll Test<br />
Write<br />
64 Bit Produkt<br />
32 Bit Multiplikator<br />
Rechtsshift<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (22)<br />
Dazugehöriger Algorithmus:<br />
Start<br />
Nein<br />
1. Test<br />
Multiplikator = 0?<br />
Ja<br />
1a. Addiere den Multiplikand zum Produkt speichere das<br />
Ergebnis im Produktregister<br />
2. Das Multiplikandenregister um 1 Bit nach links shiften<br />
3. Das Multiplikatorregister um 1 Bit nach rechts shiften<br />
32. Wiederholung?<br />
Nein<br />
Ja<br />
Stop<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (23)<br />
Dazugehöriges Beispiel:<br />
Schleife Schritt Multiplikator Multiplikand Produkt<br />
0 Anfangswerte 0011 0000 0010 0000 0000<br />
1 1a: 1 Produkt += Multiplikator 0011 0000 0010 0000 0010<br />
2: Shifte Multiplikand nach links 0011 0000 0100 0000 0010<br />
3: Shifte Multiplikator nach rechts 0001 0000 0100 0000 0010<br />
2 1a: 1 Produkt += Multiplikator 0001 0000 0100 0000 0110<br />
2: Shifte Multiplikand nach links 0001 0000 1000 0000 0110<br />
3: Shifte Multiplikator nach rechts 0000 0000 1000 0000 0110<br />
3 1: 0 Keine Operation nötig 0000 0000 1000 0000 0110<br />
2: Shifte Multiplikand nach links 0000 0001 0000 0000 0110<br />
3: Shifte Multiplikator nach rechts 0000 0001 0000 0000 0110<br />
4 1: 0 Keine Operation nötig 0000 0001 0000 0000 0110<br />
2: Shifte Multiplikand nach links 0000 0010 0000 0000 0110<br />
3: Shifte Multiplikator nach rechts 0000 0010 0000 0000 0110<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (24)<br />
2. Version einer Multiplikationshardware:<br />
32 Bit Multiplikand<br />
32 Bit Multiplikator<br />
Rechtsshift<br />
32-Bit ALU<br />
Kontroll Test<br />
Write<br />
64 Bit Produkt<br />
Rechtsshift<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (25)<br />
Dazugehöriger Algorithmus:<br />
Start<br />
Nein<br />
1. Test<br />
Multiplikator = 0?<br />
Ja<br />
1a. Addiere den Multiplikand auf die linke Hälfte des<br />
Produktes und schreibe das Ergebnis in die linke<br />
Hälfte des Produktregisters<br />
2. Das Produktregister um 1 Bit nach rechts shiften<br />
3. Das Multiplikatorregister um 1 Bit nach rechts shiften<br />
32. Wiederholung?<br />
Nein<br />
Ja<br />
Stop<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (26)<br />
Dazugehöriges Beispiel:<br />
Schleife Schritt Multiplikator Multiplikand Produkt<br />
0 Anfangswerte 0011 0010 0000 0000<br />
1 1a: 1 Produkt += Multiplikand 0011 0010 0010 0000<br />
2: Shifte Produkt nach rechts 0011 0010 0001 0000<br />
3: Shifte Multiplikator nach rechts 0001 0010 0001 0000<br />
2 1a: 1 Produkt += Multiplikand 0001 0010 0011 0000<br />
2: Shifte Produkt nach rechts 0001 0010 0001 1000<br />
3: Shifte Multiplikator nach rechts 0000 0010 0001 1000<br />
3 1: 0 Keine Operation nötig 0000 0010 0001 1000<br />
2: Shifte Produkt nach rechts 0000 0010 0000 1100<br />
3: Shifte Multiplikator nach rechts 0000 0010 0000 1100<br />
4 1: 0 Keine Operation nötig 0000 0010 0000 1100<br />
2: Shifte Produkt nach rechts 0000 0010 0000 0110<br />
3: Shifte Multiplikator nach rechts 0000 0010 0000 0110<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (27)<br />
3. Version einer Multiplikationshardware:<br />
32 Bit Multiplikand<br />
32-Bit ALU<br />
64 Bit Produkt<br />
Write<br />
Rechtsshift<br />
Kontroll Test<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (28)<br />
Dazugehöriger Algorithmus:<br />
Start<br />
Nein<br />
1. Test<br />
Produkt = 0?<br />
Ja<br />
1a. Addiere den Multiplikand auf die linke Hälfte des<br />
Produktes und schreibe das Ergebnis in die linke<br />
Hälfte des Produktregisters<br />
2. Das Produktregister um 1 Bit nach rechts shiften<br />
32. Wiederholung?<br />
Nein<br />
Ja<br />
Stop<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (29)<br />
Dazugehöriges Beispiel:<br />
Schleife Schritt Multiplikand Produkt<br />
0 Anfangswerte 0010 0000 0011<br />
1 1a: 1 Produkt += Multiplikand 0010 0010 0011<br />
2: Shifte Produkt nach rechts 0010 0001 0001<br />
2 1a: 1 Produkt += Multiplikand 0010 0011 0001<br />
2: Shifte Produkt nach rechts 0010 0001 1000<br />
3 1: 0 Keine Operation nötig 0010 0001 1000<br />
2: Shifte Produkt nach rechts 0010 0000 1100<br />
4 1: 0 Keine Operation nötig 0010 0000 1100<br />
2: Shifte Produkt nach rechts 0010 0000 0110<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (30)<br />
Signed multiplication (Multiplikation mit Vorzeichen)<br />
Prinzip der Multiplikation mit Vorzeichen:<br />
a) Fallunterscheidung entsprechend der Vorzeichen der Faktoren.<br />
(+a) · (+b) Ergebnis hat positives Vorzeichen<br />
(+a) · (-b) Ergebnis hat negatives Vorzeichen<br />
(-a) · (+b) Ergebnis hat negatives Vorzeichen<br />
(-a) · (-b) Ergebnis hat positives Vorzeichen<br />
b) Nutzung eines Algorithmus, der vorzeichenbehaftete Zahlen verarbeitet<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (31)<br />
Der Booth-Algorithmus<br />
• Darstellung einer Zahl durch eine größere Zahl abzüglich einer Differenz<br />
• Größere Zahl wird so gewählt, dass möglichst wenig Einsen<br />
• Differenz zwischen darzustellender Zahl und größerer Zahl<br />
7 0 1 1 1<br />
8 1 0 0 0<br />
-1 0 0 0 -1<br />
+1 0 0 -1<br />
Zahlen werden von rechts beginnend umcodiert:<br />
• Bei Wechsel von 0 auf 1 schreibe -1 unter die 1<br />
• Bei Wechsel von 1 auf 0 schreibe +1 unter die 0<br />
• Erfolgt kein Wechsel, so schreibe 0<br />
Merkhilfe:<br />
0 1<br />
+1<br />
1 0<br />
-1<br />
„0 +1 = 1“<br />
„1 -1 = 0“<br />
0 0 1 1 1 1 0 0<br />
0 +1 0 0 0 –1 0 0<br />
(0)<br />
0 0<br />
0<br />
1 1<br />
0<br />
„0 +0 = 0“<br />
„1 +0 = 1“<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (32)<br />
Multiplikation mit Vorzeichen<br />
Beispiel für normale Multiplikation:<br />
0 1 0 1 1 0 1<br />
0 0 +1+1+1+1 0<br />
0 0 0 0 0 0 0<br />
0 1 0 1 1 0 1<br />
0 1 0 1 1 0 1<br />
0 1 0 1 1 0 1<br />
0 1 0 1 1 0 1<br />
0 0 0 0 0 0 0<br />
0 0 0 0 0 0 0<br />
0 0 0 1 0 1 0 1 0 0 0 1 1 0<br />
Das gleiche Beispiel mit Booth-Algorithmus:<br />
0 1 0 1 1 0 1<br />
0 +1 0 0 0 -1 0<br />
0 0 0 0 0 0 0 0 0 0 0 0 0 0<br />
1 1 1 1 1 1 1 0 1 0 0 1 1<br />
0 0 0 0 0 0 0 0 0 0 0 0<br />
0 0 0 0 0 0 0 0 0 0 0<br />
0 0 0 0 0 0 0 0 0 0<br />
0 0 0 1 0 1 1 0 1<br />
0 0 0 0 0 0 0 0<br />
0 0 0 1 0 1 0 1 0 0 0 1 1 0<br />
Beobachtung:<br />
• Es sind wesentlich weniger Teiladditionen notwendig.<br />
• Tatsächliche Anzahl ist nicht bekannt.<br />
• Es können positive und negative Faktoren verarbeitet werden.<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (33)<br />
Vergleich am Beispiel 2 x 6:<br />
Multiplikand<br />
Ursprünglicher Algorithmus<br />
Booth-Algorithmus<br />
Schritt Produkt Schritt Produkt<br />
0 0010 Anfangswerte 0000 0110 Anfangswerte 0000 0110 0<br />
1 0010 1: 0 Keine Operation nötig 0000 0110 1a: 00 keine Operation nötig 0000 0110 0<br />
0010 2: Shifte Produkt nach rechts 0000 0011 2: Shifte Produkt nach rechts 0000 0011 0<br />
2 0010 1a: 1 Produkt += Multiplikand 0010 0001 1c: 10 Produkt –= Multiplikand 1110 0011 0<br />
0010 2: Shifte Produkt nach rechts 0001 0001 2: Shifte Produkt nach rechts 1111 0001 1<br />
3 0010 1a: 1 Produkt += Multiplikand 0011 0001 1d: 11 keine Operation nötig 1111 0001 1<br />
0010 2: Shifte Produkt nach rechts 0001 1000 2: Shifte Produkt nach rechts 1111 1000 1<br />
4 0010 1: 0 Keine Operation nötig 0001 1000 1b: 01 Produkt += Multiplikand 0001 1000 1<br />
0010 2: Shifte Produkt nach rechts 0000 1100 2: Shifte Produkt nach rechts 0000 1100 0<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (34)<br />
Beispiel 2 x (-3):<br />
Schleife Schritt Multiplikand Produkt<br />
0 Anfangswerte 0010 0000 1101 0<br />
1 1c: 10 Produkt –= Multiplikand 0010 1110 1101 0<br />
2: Shifte Produkt nach rechts 0010 1111 0110 1<br />
2 1b: 01 Produkt += Multiplikand 0010 0001 0110 1<br />
2: Shifte Produkt nach rechts 0010 0000 1011 0<br />
3 1c: 10 Produkt –= Multiplikand 0010 1110 1011 0<br />
2: Shifte Produkt nach rechts 0010 1111 0101 1<br />
4 1d: 11 keine Operation nötig 0010 1111 0101 1<br />
2: Shifte Produkt nach rechts 0010 1111 1010 1<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (35)<br />
Schnelle Multiplikation<br />
A) Beschleunigung der Berechnung durch Verringerung der Anzahl von Teilprodukten<br />
Bit Pair Recoding<br />
Ausgangspunkt: Codierung nach Booth-Algorithmus<br />
Folgende Bit-Kombinationen treten auf und können umcodiert werden:<br />
+2n –n = +n<br />
+2n +0 = +2n<br />
+0 +n = +n<br />
+1 -1<br />
0 +1<br />
–2n +n = -n<br />
+1 0<br />
0 +2<br />
–2n +0 = –2n<br />
0 +1<br />
0 +1<br />
+0 –n = –n<br />
0 + 0 = 0<br />
0 0<br />
0 0<br />
-1 +1<br />
0 -1<br />
-1 0<br />
0 -2<br />
0 -1<br />
0 -1<br />
Ergebnis:<br />
1 Stelle ist stets 0<br />
5 Fallunterscheidungen: +2, +1, 0, -1, -2<br />
somit Halbierung der Summandenanzahl<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
Verarbeitung:<br />
„2“ entspricht einem Linksschift<br />
Fälle +1, 0, -1 wie bei Booth<br />
T. Ihme
<strong>Computerarithmetik</strong> (36)<br />
Schnelle Multiplikation<br />
B) Beschleunigung der Berechnung schnelle Addition<br />
Ripple-Carry-Adder:<br />
w n-1<br />
a 0<br />
w 1<br />
x 1<br />
x n-1<br />
w 0<br />
x 0<br />
FA<br />
FA<br />
FA<br />
0<br />
0 a n y n-1<br />
a n-1<br />
y 1 a 1 y 0<br />
z n+1<br />
FA FA FA FA<br />
z n<br />
z n-1<br />
z 1 z 0<br />
0<br />
Nachteil: Carry-Bit muss durch alle Stellen „durchgereicht“ werden<br />
Dadurch lange Rechenzeit<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (37)<br />
Schnelle Multiplikation<br />
B) Beschleunigung der Berechnung schnelle Addition<br />
Prinzip Carry Save Adder (CSA)<br />
Volladdierer addiert eigentlich 3 Bits , erzeugt 2 Ergebnisbits (S + 2C)<br />
somit Reduzierung der Operanden von 3 auf 2<br />
Vermeidung des „Durchreichens“ des Carry-Bits<br />
Carry-Vektor<br />
wird Summand<br />
Carry-Vektor<br />
wird Summand<br />
…<br />
Addition<br />
mit Carry<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
Σ<br />
Σ<br />
C<br />
S<br />
C<br />
S<br />
C<br />
10<br />
n<br />
8<br />
7<br />
9<br />
10<br />
C<br />
C<br />
8<br />
n+1<br />
Σ<br />
10<br />
n+1<br />
S<br />
C<br />
C n<br />
11 Σ Σ Ergebnis<br />
12 12<br />
C<br />
C<br />
8<br />
n<br />
12<br />
n+1<br />
Beispiel zur Addition<br />
mehrerer Summanden<br />
der Stellen<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (38)<br />
Schnelle Multiplikation<br />
B) Beschleunigung der Berechnung schnelle Addition<br />
Beispiel für eine Implementierung mit CSA:<br />
carry-save<br />
addition<br />
0<br />
y n-1<br />
w n-1<br />
y 0<br />
c 1<br />
x n-1 w 2<br />
x 2<br />
y 2<br />
w 1<br />
x 1 y 1<br />
w 0 x 0<br />
c n<br />
s 2<br />
s 1<br />
s 0<br />
FA<br />
FA<br />
FA<br />
FA<br />
s n-1<br />
z 0<br />
FA<br />
FA FA FA<br />
z n<br />
c n-1<br />
z n-1<br />
z 2<br />
z 1<br />
z n+1<br />
c 2<br />
0<br />
z=w+x+y<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (39)<br />
Division<br />
a) Beispiel Schriftliche<br />
Division im Dezimalsystem<br />
274<br />
26<br />
14<br />
13<br />
1<br />
: 13 = 21<br />
b) Beispiel Division im<br />
Binärsystem<br />
Testsubtraktion<br />
Testsubtraktion<br />
Wiederherstellen<br />
Testsubtraktion<br />
Testsubtraktion<br />
Wiederherstellen<br />
Testsubtraktion<br />
Rest<br />
100010010<br />
10011<br />
001000<br />
10011<br />
11011<br />
01101<br />
010000<br />
10011<br />
000111<br />
10011<br />
11010<br />
01101<br />
001110<br />
10011<br />
00001<br />
ZK(01101)= 10011<br />
: 01101 = 10101<br />
(>0) Q = 1<br />
(0) Q = 1<br />
(0) Q = 1<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (39)<br />
1. Version einer Divisionshardware:<br />
64 Bit Divisor Rechtsshift<br />
64-Bit ALU<br />
32 Bit Quotient<br />
Linksshift<br />
64 Bit Rest<br />
Schreiben<br />
Kontroll Test<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (40)<br />
Dazugehöriger Algorithmus:<br />
Start<br />
1. Subtrahiere das Divisorregister vom Restregister und<br />
speichere das Ergebnis im Restregister<br />
Nein<br />
1. Test<br />
Rest < 0?<br />
Ja<br />
2a. Linksshift des Quotientenregisters um 1 Bit, setze das<br />
neue rechte Bit auf 1<br />
2b. Restauriere den ursprünglichen Wert durch Addition<br />
des Divisorregisters zum Restregister und speichere das<br />
Ergebnis im Restregister. Shifte dann das<br />
Quotientenregister nach links um 1 Bit und setze das<br />
neue rechte Bit auf 0.<br />
3. Shifte das Divisorregister 1 Bit nach rechts<br />
33. Wiederholung?<br />
Nein<br />
Ja<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (41)<br />
Dazugehöriges Beispiel:<br />
Schleife Schritt Quotient Divisor Rest<br />
0 Anfangswerte 0000 0010 0000 0000 0111<br />
1 1: Rest –= Divisor 0000 0010 0000 1110 0111<br />
2b: wenn Rest < 0 +Divisor<br />
Shifte Quotient nach links, Q0=0 0000 0010 0000 0000 0111<br />
3: Shifte Divisor nach rechts 0000 0001 0000 0000 0111<br />
2 1: Rest –= Divisor 0000 0001 0000 1111 0111<br />
2b: wenn Rest < 0 +Divisor<br />
Shifte Quotient nach links, Q0=0 0000 0001 0000 0000 0111<br />
3: Shifte Divisor nach rechts 0000 0000 1000 0000 0111<br />
3 1: Rest –= Divisor 0000 0000 1000 1111 1111<br />
2b: wenn Rest < 0 +Divisor<br />
Shifte Quotient nach links, Q0=0 0000 0000 1000 0000 0111<br />
3: Shifte Divisor nach rechts 0000 0000 0100 0000 0111<br />
4 1: Rest –= Divisor 0000 0000 0100 0000 0011<br />
2a: wenn Rest = 0 <br />
Shifte Quotient nach links, Q 0 =1<br />
0001 0000 0100 0000 0011<br />
3: Shifte Divisor nach rechts 0001 0000 0010 0000 0011<br />
5 1: Rest –= Divisor 0001 0000 0010 0000 0001<br />
2a: wenn Rest = 0 <br />
Shifte Quotient nach links, Q 0 =1<br />
0011 0000 0010 0000 0001<br />
3: Shifte Divisor nach rechts 0011 0000 0001 0000 0001<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (42)<br />
Dazugehöriges Beispiel:<br />
Schleife Schritt Quotient Divisor Rest<br />
0 Anfangswerte 0000 0010 0000 0000 0111<br />
1 1: Rest –= Divisor 0000 0010 0000 1110 0111<br />
2b: wenn Rest < 0 +Divisor<br />
Shifte Quotient nach links, Q0=0 0000 0010 0000 0000 0111<br />
3: Shifte Divisor nach rechts 0000 0001 0000 0000 0111<br />
2 1: Rest –= Divisor 0000 0001 0000 1111 0111<br />
2b: wenn Rest < 0 +Divisor<br />
Shifte Quotient nach links, Q0=0 0000 0001 0000 0000 0111<br />
3: Shifte Divisor nach rechts 0000 0000 1000 0000 0111<br />
3 1: Rest –= Divisor 0000 0000 1000 1111 1111<br />
2b: wenn Rest < 0 +Divisor<br />
Shifte Quotient nach links, Q0=0 0000 0000 1000 0000 0111<br />
3: Shifte Divisor nach rechts 0000 0000 0100 0000 0111<br />
4 1: Rest –= Divisor 0000 0000 0100 0000 0011<br />
2a: wenn Rest ≥ 0 <br />
Shifte Quotient nach links, Q 0 =1<br />
0001 0000 0100 0000 0011<br />
3: Shifte Divisor nach rechts 0001 0000 0010 0000 0011<br />
5 1: Rest –= Divisor 0001 0000 0010 0000 0001<br />
2a: wenn Rest ≥ 0 <br />
Shifte Quotient nach links, Q 0 =1<br />
0011 0000 0010 0000 0001<br />
3: Shifte Divisor nach rechts 0011 0000 0001 0000 0001<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (43)<br />
2. Version einer Divisionshardware:<br />
32 Bit Divisor<br />
Linksshift<br />
32-Bit ALU<br />
32 Bit Quotient<br />
64 Bit Rest<br />
Linksshift<br />
Schreiben<br />
Kontroll Test<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (44)<br />
3. Version einer Divisionshardware:<br />
32 Bit Divisor<br />
32-Bit ALU<br />
64 Bit Rest<br />
Links-/Rechtsshift<br />
Schreiben<br />
Kontroll Test<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (45)<br />
Dazugehöriger<br />
Algorithmus:<br />
Start<br />
1. Das Restregister um 1 Bit nach links shiften<br />
2. Subtrahiere das Divisorregister von der linken Hälfte<br />
des Restregisters und speichere das Ergebnis in der<br />
linken Hälfte des Restregisters<br />
Nein<br />
3. Test<br />
Rest < 0?<br />
Ja<br />
3a. Linksshift des Restregisters um 1 Bit, setze das neue<br />
rechte Bit auf 1<br />
3b. Restauriere den ursprünglichen Wert durch Addition<br />
des Divisorregisters zur linken Hälfte des Restregisters<br />
und speichere das Ergebnis in der linken Hälfte des<br />
Restregisters. Shifte dann das Restregister nach links um<br />
1 Bit und setze das neue rechte Bit auf 0.<br />
31. Wiederholung?<br />
Nein<br />
Shifte die linke Hälfte des Restregisters 1 Bit nach rechts<br />
Ja<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (46)<br />
Dazugehöriges Beispiel:<br />
Schleife Schritt Divisor Rest<br />
0 Anfangswerte 0010 0000 0111<br />
Rest nach links shiften 0010 0000 1110<br />
1 2: Rest –= Divisor 0010 1110 1110<br />
3b: wenn Rest < 0 +Divisor<br />
Shifte Rest nach links, R 0 =0<br />
0010 0001 1100<br />
2 2: Rest –= Divisor 0010 1111 1100<br />
3b: wenn Rest < 0 +Divisor<br />
Shifte Rest nach links, R 0 =0<br />
0010 0011 1000<br />
3 2: Rest –= Divisor 0010 0001 1000<br />
3b: wenn Rest ≥ 0 <br />
Shifte Rest nach links, R 0 =1 0010 0011 0001<br />
4 2: Rest –= Divisor 0010 0001 0001<br />
3b: wenn Rest ≥ 0 <br />
Shifte Rest nach links, R 0 =1 0010 0010 0011<br />
5 Shifte linke Hälfte des Restes nach links 0010 0001 0011<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (47)<br />
Nichtwiederherstellender (non restoring) Algorithmus zur Division:<br />
Prinzip: Ersetze<br />
( r + d ) ⋅ 2 − d<br />
durch<br />
2r + d<br />
• Falls Ergebnis der Testsubtraktion negativ, erfolgt Wiederherstellung des<br />
ursprünglichen Restes durch Addition von d<br />
( r + d )<br />
• Bei Übergang zur nächsten Stelle erfolgt Verschiebung des Restes eine Stelle<br />
nach links, das entspricht einer Multiplikation mit 2<br />
( r + d ) ⋅ 2<br />
• Hier erfolgt die nächste Testsubtraktion<br />
( r + d ) ⋅ 2 − d<br />
• Im Fall eines negativen Ergebnisses bei einer Testsubtraktion kann die<br />
Testsubtraktion in der nächsten Stelle durch eine Addition ersetzt werden<br />
( r + d ) ⋅ 2 − d = 2r<br />
+ 2d<br />
− d = 2r<br />
+ d<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (48)<br />
Beispiel zum nichtwiederherstellenden Algorithmus zur Division:<br />
Testsubtraktion<br />
Testsubtraktion<br />
Testaddition<br />
Testsubtraktion<br />
Testaddition<br />
Rest<br />
100010010<br />
10011<br />
001000<br />
10011<br />
110110<br />
01101<br />
0000111<br />
10011<br />
110100<br />
01101<br />
00001<br />
ZK(01101)= 10011<br />
: 01101 = 10101<br />
(>0) Q = 1<br />
(0) Q = 1<br />
(0) Q = 1<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (49)<br />
Kriterien für die Qualität der Zahlendarstellung:<br />
• Größe des darstellbaren Zahlenbereichs (range)<br />
• Genauigkeit (precision) der Zahlendarstellung<br />
Diese beiden Kriterien sind prinzipiell unabhängig voneinander.<br />
Wissenschaftliche Notation: n = a x r E<br />
a - Mantisse (Argument)<br />
r - Radix (Basis)<br />
E - Exponent (Charakteristik)<br />
Floating point - Zahlen in normierter Form:<br />
n = (-1) s · a · 2 E mit s als Vorzeichenbit und 1 ≤ a < 2<br />
Parameter für mögliche Darstellungen von Floating point - Zahlen:<br />
• Anzahl der insgesamt verfügbaren Bits (Worte)<br />
• jeweils für Mantisse bzw. Exponent:<br />
– Darstellung<br />
– Anzahl der verfügbaren Bits (Trade-off!)<br />
– Lokalisierung<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (50)<br />
Darstellung im IEEE Standard 754:<br />
Einfache Genauigkeit:<br />
32 Bits<br />
S E’ M<br />
Vorzeichen<br />
der Zahl<br />
0 = “+”<br />
1 = “-”<br />
8 Bit vorzeichenbehafteter<br />
Exponent<br />
Excess-127<br />
Darstellung<br />
23 Bit Mantisse<br />
Darstellung entspricht: ± 1,M · 2 E’-127<br />
Beispiel mit<br />
Einfacher Genauigkeit:<br />
Doppelte Genauigkeit:<br />
0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 …<br />
Darstellung entspricht: 1,001010...0 · 2 -87<br />
64 Bits<br />
S E’ M<br />
Vorzeichen<br />
11 Bit<br />
Excess-1023<br />
Exponent<br />
52 Bit Mantisse<br />
Darstellung entspricht: ± 1,M · 2 E’-1023<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (51)<br />
Truncation: Kappung überzähliger Bits durch<br />
• chopping<br />
• von Neuman - Runden<br />
• runden<br />
Kappung überzähliger Bits - Chopping<br />
Prinzip<br />
• Abschneiden der zu rundenden Stellen<br />
Beispiel: 0, b 1 b 2 b 3 b 4 b 5 b 6 Rundung auf 3 Nachkommastellen<br />
0, b 1 b 2 b 3 b 4 b 5 b 6 0, b 1 b 2 b 3<br />
Fehler:<br />
• Zwischen 0 ≤ e < 1 der letzten verbleibenden Stelle (hier b 3 )<br />
• unsymmetrischer Fehler<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (52)<br />
Kappung überzähliger Bits – Von-Neumann-Runden<br />
Prinzip<br />
• Wenn zu rundende Stellen ungleich 0 letzte verbleibende Stelle = 1<br />
• Wenn alle zu rundende Stellen gleich 0 letzte verbleibende Stelle = 0<br />
Beispiel: 0, b 1 b 2 b 3 b 4 b 5 b 6 Rundung auf 3 Nachkommastellen<br />
a) 0, b 1 b 2 b 3 1 0 1 0, b 1 b 2 1<br />
b) 0, b 1 b 2 b 3 0 0 0 0, b 1 b 2 0<br />
Fehler<br />
• -1 < e < +1 der letzten verbleibenden Stelle, (hier b 3 )<br />
• symmetrischer Fehler<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (53)<br />
Kappung überzähliger Bits – Runden<br />
Prinzip<br />
• Unverzerrte oder mathematische Rundung<br />
• Runden zur nächstgelegenen gekürzten Darstellung<br />
• Falls eindeutige Bestimmung der nächstgelegenen gekürzten Darstellung<br />
nicht möglich, d.h. erste zu rundende Stelle = 1 und alle anderen zu<br />
rundenden Stellen = 0 Runden zur nächsten „geraden“ Zahl<br />
Beispiel: 0, b 1 b 2 b 3 b 4 b 5 b 6 Rundung auf 3 Nachkommastellen<br />
a) 0, b 1 b 2 b 3 1 0 1 0, b 1 b 2 b 3 + 0, 0 0 1<br />
0, b 1 b 2 b 3 0 1 1 0, b 1 b 2 b 3<br />
b) 0, b 1 b 2 b 3 1 0 0 Fallunterscheidung<br />
b 1 ) falls b 3 = 0 0, b 1 b 2 0<br />
b 2 ) falls b 3 = 1 0, b 1 b 2 1 + 0, 0 0 1<br />
Fehler:<br />
• -0,5 < e < +0,5 der letzten verbleibenden Stelle (hier b 3 )<br />
• symmetrischer Fehler<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
Wiederholung Mathematik 4. Klasse:<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (54)<br />
Verallgemeinerter Additions/Subtraktions - Algorithmus:<br />
• Rechtsshift auf der Mantisse des kleineren Operanden zur Angleichung der<br />
Exponenten<br />
• Exponent der Summe/Differenz := Exponent des größten Operanden<br />
• Addition/Subtraktion der Mantissen und Bestimmung des Vorzeichens<br />
• Wenn nötig, Normalisierung des Ergebnisses<br />
Verallgemeinerter Multiplikations/Divisions- Algorithmus:<br />
• Addiere/Subtrahiere die Exponenten und subtrahiere/addiere 127 10<br />
• Multipliziere/Dividiere die Mantissen und bestimme das Vorzeichen<br />
• Wenn nötig, normalisiere das Ergebnis<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (55)<br />
Beispiel für die HW - Implementierung einer Addition/Subtraktion:<br />
{<br />
A: S , E’ , M<br />
B: S , E’ , M<br />
A A A<br />
B B B<br />
E’ A<br />
Multiplexer<br />
E’<br />
E’ B<br />
X<br />
E’ B<br />
8 Bit<br />
Subtrahierer<br />
Vorzeichen<br />
S A S B<br />
n = [ E’ A - E’ B]<br />
Addition /<br />
Subtraktion<br />
Addition<br />
kombinatorisches Subtraktion<br />
Steuerungs-<br />
Netzwerk<br />
Vorzeichen<br />
E’ A<br />
Vornullen-<br />
Erkennung<br />
M A<br />
Vertauscher<br />
Schieberegister<br />
n Bit nach rechts<br />
Mantisse<br />
add. / sub.<br />
M B<br />
Normalisieren<br />
und Runden<br />
Größe M<br />
M von Zahlen<br />
mit kleinerem E’<br />
M von Zahlen<br />
mit größerem E’<br />
8 Bit<br />
Subtrahierer<br />
{<br />
32 Bit Operanden<br />
}<br />
}<br />
R: S R E’ R<br />
E’ - X<br />
M R<br />
32 Bit Ergebnis:<br />
R = A + B<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme
<strong>Computerarithmetik</strong> (56)<br />
Zusammenfassung:<br />
• <strong>Computerarithmetik</strong> ist endlich und kann folglich nicht übereinstimmen mit der<br />
natürlichen Arithmetik<br />
• Selbst der IEEE 754 - Standard für die floating point - Darstellung, wie jede andere<br />
auch, ist fast immer eine Approximation der realen Zahlen.<br />
• Rechnersysteme müssen dafür sorgen, den daraus resultierenden Unterschied<br />
zwischen <strong>Computerarithmetik</strong> und Arithmetik in der realen Welt möglichst zu<br />
minimieren, so etwa im einzelnen durch folgende Techniken:<br />
– Carry-lookahead - Techniken für Addierer mit hoher Performanz<br />
– Für schnelle Multiplizierer: Booth-Algorithmus und Bit-pair recoding zur<br />
Reduzierung der Anzahl der benötigten Operationen für die Erzeugung des<br />
Produkts, Carry-save - Addition zur nochmaligen substantiellen Reduzierung auf<br />
letztlich zwei zu addierende Summanden nach der carry-lookahead - Technik.<br />
• Programmierer sollten sich dieser Zusammenhänge bewusst sein.<br />
Vorlesung Rechnerarchitektur und Rechnertechnik WS 2013<br />
T. Ihme