01.03.2014 Aufrufe

Computerarithmetik

Computerarithmetik

Computerarithmetik

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!