01.03.2014 Aufrufe

a+b - Computer and Communication Systems

a+b - Computer and Communication Systems

a+b - Computer and Communication Systems

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Computer</strong> <strong>and</strong> <strong>Communication</strong> <strong>Systems</strong><br />

(Lehrstuhl für Technische Informatik)<br />

Arithmetik<br />

Zahlendarstellung, Addition und Subtraktion<br />

Multiplikation, Division,<br />

Fest- und Gleitkommazahlen<br />

[TI] Winter 2013/2014 Arithmetik 1


Lernziele<br />

Realisierung von Rechenwerken für alle vier<br />

arithmetischen Grundoperationen (+, –, *, /) auf ganzen<br />

Zahlen mit<br />

Implementierung als Schaltnetz bzw. Schaltwerk<br />

Abschätzung des Zeitbedarfs für eine Operation<br />

Möglichkeiten der Beschleunigung<br />

Beh<strong>and</strong>lung negativer Zahlen<br />

Darstellung und Rechnen von/mit Festkommazahlen<br />

Verständnis von Gleitkommazahlen<br />

Aufbau gemäß IEEE 754 St<strong>and</strong>ard<br />

Algorithmen für Grundoperationen<br />

Realisierung von Rechenwerken<br />

[TI] Winter 2013/2014 Arithmetik 2


ZAHLENDARSTELLUNG<br />

[TI] Winter 2013/2014 Arithmetik 3


Zahlendarstellungen im Rechner<br />

Ausschließliche Verwendung von Binärzahlen, die auf Worte<br />

einer Breite von n Bit abgebildet werden.<br />

Im Prozessor stehen zur Speicherung ganzer Zahlen mehrere n-<br />

Bit Register (realisiert durch n Flip-Flops) zur Verfügung.<br />

Typische Wortbreiten:<br />

n = 8:<br />

n = 16:<br />

n = 32:<br />

n = 64:<br />

Byte, in Mikroprozessoren der ersten Generation, wie<br />

z.B. Intel 8080 oder Z80<br />

Halbwort (bei Intel: Wort) in Minicomputern und<br />

Mikroprozessoren der zweiten Generation, wie z.B.<br />

PDP-11, Intel 8086, Motorola 68000<br />

Wort (bei Intel: Doppelwort) in Mikroprozessoren der<br />

dritten Generation, z.B. Intel Pentium, Motorola 68030<br />

Doppelwort (bei Intel: Quadwort) in aktuellen<br />

Hochleistungsprozessoren, z.B. PowerPC, AMD Opteron.<br />

[TI] Winter 2013/2014 Arithmetik 4


Darstellung von Zahlen (Wiederholung)<br />

Darstellung positiver ganzer Zahlen in positionaler<br />

Notation (auch als Stellenwertsystem bezeichnet).<br />

Jede natürliche Zahl z mit 0 ≤ z ≤ b n –1 ist eindeutig als<br />

n-stellige Zahl zur Basis b darstellbar.<br />

Darstellung negativer ganzer Zahlen:<br />

Vorzeichen und Betrag<br />

(b-1)-Komplement (Bei Binärzahlen: Einerkomplement)<br />

b-Komplement (Bei Binärzahlen: Zweierkomplement)<br />

Details: Siehe Vorlesung Praktische Informatik!<br />

[TI] Winter 2013/2014 Arithmetik 5


ADDITION UND SUBTRAKTION<br />

[TI] Winter 2013/2014 Arithmetik 6


Addition (1)<br />

Addition zweier positiver n-stelliger Binärzahlen a und b kann<br />

stellenweise von rechts nach links durchgeführt werden.<br />

Der h<strong>and</strong>schriftlichen Addition zweier Dezimalzahlen entsprechend!<br />

In jeder Stelle i kann ein Übertrag c i = 1 auftreten (Carry).<br />

Gilt für die Summe s = a + b ≥ 2 n , so kann das Ergebnis nicht mehr als<br />

n-Bit Zahl dargestellt werden.<br />

Es entsteht ein (n+1)-tes Summenbit, das als Überlauf (Overflow)<br />

bezeichnet wird.<br />

[TI] Winter 2013/2014 Arithmetik 7


Addition (2)<br />

Addition der niedrigstwertigen Bits von a und b erfordert einen<br />

Halbaddierer, der aus a 0 und b 0 sowohl die Summe s 0 als auch<br />

den Übertrag (Carry) c 0 ermittelt.<br />

Verzögerung für c 0 : τ (mit τ = Laufzeit eines elementaren Gatters)<br />

Verzögerung für s 0 : 2τ<br />

[TI] Winter 2013/2014 Arithmetik 8


Addition (3)<br />

Addition von a i , b i und c i–1 an den Bitpositionen i = 1, ... ,<br />

n–1 erfordert einen Volladdierer (FA = Full Adder), der<br />

die Summe s i und den Übertrag c i bestimmt:<br />

Verzögerung je nach Pfad und Realisierung: 2τ bis 4τ<br />

[TI] Winter 2013/2014 Arithmetik 9


Einfache Addierwerke (1)<br />

Serielles binäres Addierwerk:<br />

Benötigt nur einen Volladdierer, ein Flip-Flop und drei n-Bit<br />

Schieberegister (für Summ<strong>and</strong>en a, b und Ergebnis s):<br />

Synchrones Schaltwerk<br />

Flip-Flop muss jedoch zuvor initialisiert werden.<br />

In Takt i wird Ergebnisbit s i aus a i , b i und c i–1 bestimmt.<br />

Addition von zwei n-Bit Zahlen benötigt n Taktzyklen.<br />

[TI] Winter 2013/2014 Arithmetik 10


Einfache Addierwerke (2)<br />

Paralleles binäres Addierwerk:<br />

n Volladdierer ermöglichen Addition zweier n-Bit Zahlen:<br />

An Bitposition 0 genügt bei der Addition zweier positiver Zahlen<br />

auch ein Halbaddierer.<br />

Im ungünstigen Fall kann ein an Position 0 entstehender Übertrag<br />

die Bitstellen 1 bis n–1 durchlaufen und s 1 bis s n–1 verändern.<br />

Wird daher auch als „Ripple Carry“ - Addierer (RCA) bezeichnet.<br />

Resultierende maximale Verzögerung: 2τ + (n–1) ⋅ 2τ = 2nτ<br />

[TI] Winter 2013/2014 Arithmetik 11


Carry Look-Ahead Addierwerk (1)<br />

Für eine schnelle Addition ist RCA mit einer maximalen<br />

Verzögerung von 2nτ ungeeignet.<br />

Gibt es auch eine schnellere Möglichkeit, zwei n-Bit Zahlen zu<br />

addieren?<br />

Idee: Ersetzung des sequentiellen Übertragdurchlaufs<br />

durch eine parallele Vorausberechnung aller Überträge c i .<br />

Ansatz: Betrachte i-ten Volladdierer eines RCA.<br />

Es gilt: c i = a i ⋅ b i + (a i + b i ) ⋅ c i–1 := G i + P i ⋅ c i–1<br />

„Generate“: G i = a i ⋅ b i gibt an, ob in Stelle i ein Übertrag erzeugt<br />

wird.<br />

„Propagate“: P i = a i + b i gibt an, ob in Stelle i ein Übertrag<br />

propagiert wird (P i = 1) oder nicht (P i = 0).<br />

[TI] Winter 2013/2014 Arithmetik 12


Carry Look-Ahead Addierwerk (2)<br />

Für die Überträge c i ergibt sich somit:<br />

c 0 = a 0 b 0 := G 0<br />

c 1 = a 1 b 1 + (a 1 + b 1 )c 0 := G 1 + P 1 G 0<br />

c 2 = G 2 + P 2 G 1 + P 2 P 1 G 0<br />

c 3 = G 3 + P 3 G 2 + P 3 P 2 G 1 + P 3 P 2 P 1 G 0<br />

c 4 = G 4 + P 4 G 3 + P 4 P 3 G 2 + P 4 P 3 P 2 G 1 + P 4 P 3 P 2 P 1 G 0<br />

c 5 = ...<br />

Verzögerung<br />

Zur Bestimmung aller P i und G i : τ<br />

Zur Bestimmung aller Signale c i bei gegebenen P i und G i : 2τ<br />

Jedoch werden zur Bestimmung von c i mehrere große UND-Gatter<br />

mit max. i +1 Eingängen und ein großes ODER-Gatter mit i +1<br />

Eingängen benötigt.<br />

Annahme eines einheitlichen τ ist unrealistisch!<br />

[TI] Winter 2013/2014 Arithmetik 13


Carry Look-Ahead Addierwerk (3)<br />

Aufbau eines Carry Look-Ahead Addierers (CLA) für n = 4 Bit:<br />

hier mit P i = a i ⊕ b i<br />

anstatt P i = a i + b i<br />

[TI] Winter 2013/2014 Arithmetik 14


Carry Look-Ahead Addierwerk (4)<br />

Ein vollständiger n-Bit CLA benötigt zur Addition zweier n-Bit Zahlen<br />

die Zeit 5τ (unabhängig von n)!<br />

Probleme des vollständigen n-Bit CLA<br />

Hoher Aufw<strong>and</strong> für große n<br />

Gatter mit bis zu n + 1 Eingängen erforderlich.<br />

Hoher „fan-in“<br />

Gatterausgänge P i und G i sind mit bis zu (n +1) 2 / 4 Gattereingängen<br />

verschaltet.<br />

Hoher „fan-out“<br />

Vollständiger CLA ist nicht praktikabel !<br />

Kombination von RCA und CLA als Alternative:<br />

[TI] Winter 2013/2014 Arithmetik 15


Subtraktion (1)<br />

Statt der Entwicklung eines eigenen Subtrahierwerkes<br />

kann bei Verwendung des Zweierkomplements jedes<br />

Addierwerk auch zur Subtraktion verwendet werden.<br />

Ansatz: a – b = a + (–b)<br />

Realisierung für zwei n-stellige Zahlen a und b:<br />

Invertierung aller Bits b i<br />

Addition von 1 zur Bildung des Zweierkomplements –b<br />

Kann z.B. in den zuvor besprochenen Addierwerken durch Setzen von c in = 1<br />

ohne zusätzlichen Hardwareaufw<strong>and</strong> erreicht werden!<br />

Addition von a und (−b)<br />

Summe ist korrekt, wenn Überlaufbit c n–1 ignoriert wird.<br />

Überlauf v tritt nur dann ein, wenn gilt: c n–1 ≠ c n–2<br />

[TI] Winter 2013/2014 Arithmetik 16


Subtraktion (2)<br />

Realisierung eines n-Bit Addier-/Subtrahierwerkes<br />

Addition a + b bei S = 0, Subtraktion a – b bei S = 1<br />

Invertieren der Bits b i bei S = 1 durch XOR-Gatter<br />

Intern ist jedes beliebige n-Bit Addierwerk verwendbar!<br />

[Herold 2007]<br />

[TI] Winter 2013/2014 Arithmetik 17


Subtraktion (3)<br />

Einige Beispiele zur Addition von im Zweierkomplement<br />

kodierten positiven und negativen 8-Bit Zahlen:<br />

[TI] Winter 2013/2014 Arithmetik 18


Subtraktion (4)<br />

Drei Fälle bei der Addition im Zweierkomplement:<br />

1) Zahlen a und b positiv (d.h. a n-1 = b n-1 = 0)<br />

Überlauf bei s n-1 = 1 (tritt auf bei c n-1 = 0, c n-2 = 1)<br />

2) Zahlen a und b negativ (d.h. a n-1 = b n-1 = 1)<br />

nun sind a´= −a und b´= −b positiv, somit gilt:<br />

sum = a + b = (2 n – a´) + (2 n – b´) = 2 ⋅ 2 n – (a´+ b´)<br />

korrektes Ergebnis wäre jedoch: s = 2 n – (a´+ b´) = sum – 2 n<br />

⇒ erforderliche Korrektur: Überlaufbit c n-1 ignorieren<br />

Überlauf bei s n-1 = 0 (tritt auf bei c n-1 = 1, c n-2 = 0)<br />

3) Vorzeichen von a und b unterschiedlich (b sei negativ):<br />

sum = a + b = a + (2 n – b´) = 2 n – (b´− a) ist korrekt für |b| > |a|,<br />

korrektes Ergebnis für |b|


ALU (1)<br />

ALU = Arithmetic Logic Unit<br />

Realisiert die Elementaroperationen eines Rechners (arithmetische<br />

Operationen wie Addition und Subtraktion als auch logische<br />

Operationen wie AND und OR).<br />

Aus zwei Eingangswerten X und Y wird ein Ergebniswert Z gebildet.<br />

X, Y und Z sind meist Register.<br />

Typische Registerbreiten sind 8, 16, 32, 64 Bits.<br />

Dementsprechend spricht man von 8-, 16-, 32- und 64-Bit-Rechner.<br />

Bei der Ausführung von Operationen können bestimmte<br />

Zusatzinformationen anfallen.<br />

Deshalb gibt es noch ein Flag-Register, in dem entsprechende Bits gesetzt<br />

werden, wenn bei der ausgeführten Operation ein entsprechendes<br />

Ergebnis aufgetreten ist.<br />

[TI] Winter 2013/2014 Arithmetik 20


ALU (2)<br />

[Herold 2007]<br />

[TI] Winter 2013/2014 Arithmetik 21


ALU (3)<br />

[Herold 2007]<br />

s2 unterscheidet zwischen arithmetischen und logischen<br />

Operationen bzw. zwischen Konstanten 0 und 1.<br />

s1 und s0 wählen konkrete Operation (arithmetisch bzw.<br />

logisch).<br />

[TI] Winter 2013/2014 Arithmetik 22


Schaltungsrealisierung einer n-Bit-ALU<br />

[TI] Winter 2013/2014 Arithmetik 23<br />

[Herold 2007]


MULTIPLIKATION<br />

[TI] Winter 2013/2014 Arithmetik 24


Multiplikation (1)<br />

Algorithmus zur Multiplikation zweier positiver Binärzahlen a und b<br />

entspricht der h<strong>and</strong>schriftlichen Multiplikation zweier positiver<br />

Dezimalzahlen.<br />

Produkt p zweier positiver n-Bit Binärzahlen hat 2n Bitstellen.<br />

Algorithmus ist zurückführbar auf wiederholte bedingte Additionen<br />

und Schiebeoperationen.<br />

[TI] Winter 2013/2014 Arithmetik 25


Multiplikation (2)<br />

Modifizierter<br />

Algorithmus:<br />

Beispiel für n = 5 (vgl. letzte Folie):<br />

In der 2n-Bit Variablen p werden<br />

n partielle Produkte addiert.<br />

Rechtsschieben von p ersetzt das<br />

Linksschieben von a.<br />

[TI] Winter 2013/2014 Arithmetik 26


Multiplizierwerke (1)<br />

Implementierung A: Serielles Schaltwerk<br />

Direkte Umsetzung des modifizierten Algorithmus in digitaler Logik<br />

Bedingte Addition mittels UND<br />

Steuerwerk muss Signale erzeugen:<br />

clear p: setze p = 0<br />

shift right: schiebe b um eine Position nach rechts<br />

load <strong>and</strong> shift right: schiebe p um eine Position nach rechts und<br />

lade p 2n-1 ... p n parallel<br />

Zur Berechnung von p sind n Taktzyklen erforderlich!<br />

[TI] Winter 2013/2014 Arithmetik 27


Multiplizierwerke (2)<br />

Implementierung B: Feldmultiplizierer („array multiplier“)<br />

Direkte Realisierung des h<strong>and</strong>schriftlichen<br />

Multiplikationsschemas für Binärzahlen a und b in digitaler Logik.<br />

Es werden zunächst alle Bitprodukte a j ⋅ b i ermittelt.<br />

Für jedes Multiplikatorbit b i wird hieraus ein partielles Produkt q i<br />

= (a n–1 b i a n–2 b i ... a 1 b i a 0 b i ) 2 = a b i gebildet.<br />

Die n partiellen Produkte q i werden jeweils um i Bitpositionen<br />

nach links verschoben und aufaddiert.<br />

Beispiel für n = 4:<br />

[TI] Winter 2013/2014 Arithmetik 28


Multiplizierwerke (3)<br />

Einfache Implementierung mittels Multipliziererzellen aus<br />

jeweils einem Volladdierer und einem UND-Gatter:<br />

Maximale Zeit zur Multiplikation zweier 4-Bit Zahlen: 21τ<br />

Maximale Zeit zur Multiplikation zweier n-Bit Zahlen: (6n – 3)τ<br />

[TI] Winter 2013/2014 Arithmetik 29


Multiplizierwerke (4)<br />

Implementierung C: CSA-Kette / CSA-Baum<br />

Zur Bildung des Produktes p zweier n-Bit Zahlen müssen n<br />

partielle Produkte q i = a b i aufaddiert werden.<br />

Zur schnellen Addition vieler Zahlen bieten sich Carry Save<br />

Addierer (CSA) an, bei denen entstehende Überträge erst bei der<br />

Addition des nächsten Summ<strong>and</strong>en berücksichtigt werden.<br />

Ein m-Bit CSA-Baustein ermöglicht eine partielle Addition von<br />

drei m-Bit Zahlen.<br />

Für eine Addition von k Zahlen werden k – 2 CSA-Bausteine<br />

benötigt.<br />

Ein zusätzlicher RCA oder CLA dient der Addition der am Ende<br />

noch verbleibenden Überträge.<br />

[TI] Winter 2013/2014 Arithmetik 30


Multiplizierwerke (5)<br />

Beispiel: 4-Bit CSA zur Addition von fünf 4-Bit Zahlen u, v, w, x, y<br />

[TI] Winter 2013/2014 Arithmetik 31


Multiplizierwerke (6)<br />

Zur Addition der n partiellen<br />

Produkte q i = a b i werden n–2<br />

schnelle CSA-Addierer benötigt.<br />

Anordnung der Addierer z.B. als<br />

CSA-Kette, hier für n = 6.<br />

In jeder Stufe sind einige Bits<br />

des Produkts p berechnet.<br />

Zeit zur Multiplikation zweier<br />

n-Bit Zahlen: (2n – 3)τ + t Add<br />

Für einen CLA gilt z.B. t Add = 5τ<br />

Weitere Beschleunigung durch<br />

Anordnung als CSA-Baum.<br />

[TI] Winter 2013/2014 Arithmetik 32


Multiplizierwerke (7)<br />

Implementierung D: Zweistufiges Schaltnetz<br />

Idee: Realisierung eines n × n Bit Multiplizierers als zweistufiges<br />

Schaltnetz mit 2n Eingängen und 2n Ausgängen.<br />

Sehr geringe Zeitverzögerung: nur 2τ.<br />

Implementierung z.B. durch ein ROM oder PROM mit 2 2n Zeilen<br />

aus 2n-Bit Worten.<br />

Jedoch sehr hoher Speicheraufw<strong>and</strong>:<br />

n<br />

Produkt<br />

2n<br />

Zeilen<br />

2 2n PROM<br />

Größe<br />

2 4 16 64 Bit<br />

4 8 256 256 Byte<br />

8 16 65536 128 KByte<br />

16 32 4.3 ⋅ 10 9 1.6 GByte<br />

[TI] Winter 2013/2014 Arithmetik 33


Multiplikation negativer Zahlen (1)<br />

Bislang Betrachtung ausschließlich positiver Multiplikatoren<br />

und Multiplik<strong>and</strong>en.<br />

Was passiert bei negativen im Zweierkomplement kodierten<br />

n-Bit Multiplikatoren bzw. n-Bit Multiplik<strong>and</strong>en?<br />

a ⋅ (– b) = a ⋅ (2 n – b) = a ⋅ 2 n – a ⋅ b (statt 2 2n – a ⋅ b)<br />

(– a) ⋅ b = (2 n – a) ⋅ b = b ⋅ 2 n – a ⋅ b (statt 2 2n – a ⋅ b)<br />

(– a) ⋅ (– b) = (2 n – a) ⋅ (2 n – b) = 2 2n – a ⋅ 2 n – b ⋅ 2 n + a ⋅ b (statt a ⋅ b)<br />

Ohne besondere Maßnahme liefert binärer Multiplizierer<br />

falsche Ergebnisse!<br />

Jedoch aufwendige Addition von Korrekturtermen möglich.<br />

Man addiert Term um auf das gewünschte Ergebnis zu kommen.<br />

Alternative: Trennung von Vorzeichen und Betrag.<br />

Hoher Aufw<strong>and</strong> für Umw<strong>and</strong>lung von Zahlen vor/nach der<br />

Multiplikation.<br />

[TI] Winter 2013/2014 Arithmetik 34


Multiplikation negativer Zahlen (2)<br />

Idee: Vereinfachung der Multiplikation, wenn<br />

Multiplikator eine 1-Folge repräsentiert:<br />

a × 111 = a × 1000 – a × 0001<br />

Auch innerhalb längerer Bitfolgen möglich.<br />

z.B. a × 0011100 = a × 0100000 – a × 0000100<br />

Multiplikation mit einer 1-Folge lässt sich stets durch eine<br />

Addition und eine Subtraktion ersetzen.<br />

Der Algorithmus nach Booth analysiert zwei benachbarte<br />

Bits b i und b i–1 des Multiplikators:<br />

(b i b i–1 ) 2 = 01 2 : Addition von a × 2 i<br />

(b i b i–1 ) 2 = 10 2 : Subtraktion von a × 2 i<br />

(b i b i–1 ) 2 = 00 2 oder (b i b i–1 ) 2 = 11 2 : keine Addition<br />

Ergänzung von b –1 = 0 erforderlich.<br />

[TI] Winter 2013/2014 Arithmetik 35


Multiplikation negativer Zahlen (3)<br />

Realisierung der Subtraktion von a × 2 i durch Addition des<br />

Zweierkomplements (vorzeichenrichtig ergänzt).<br />

Beispiele (mit n = 5):<br />

Funktioniert für beliebige positive und negative<br />

Multiplik<strong>and</strong>en und Multiplikatoren!<br />

[TI] Winter 2013/2014 Arithmetik 36


DIVISION<br />

[TI] Winter 2013/2014 Arithmetik 37


Division (1)<br />

Umkehrung der Multiplikation: Berechnung von q = a / b<br />

durch wiederholte bedingte Subtraktionen und<br />

Schiebeoperationen.<br />

In jedem Schritt wird Divisor b testweise vom Dividenden<br />

a subtrahiert:<br />

q i = 1, falls a – b > 0<br />

q i = 0 und Korrektur durch a = a + b, falls a – b < 0<br />

Dieses Verfahren wird auch als „Restoring“- Division<br />

bezeichnet.<br />

Allgemein gilt: Dividend / Divisor = Quotient + Rest /<br />

Divisor bzw.: Dividend = Divisor × Quotient + Rest<br />

[TI] Winter 2013/2014 Arithmetik 38


Division (2)<br />

Beispiel: 29 10 / 5 10 = 5 10 mit Rest 4 10<br />

[TI] Winter 2013/2014 Arithmetik 39


Division (3)<br />

Aufgabenstellung hier: n-Bit Dividend a, n-Bit Divisor b<br />

⇒ Ergebnis: n-Bit Quotient q, n-Bit Rest r<br />

Es wird intern eine 2n-Bit Variable q = (q 2n-1 ,...,q 0 ) verwendet.<br />

Algorithmus zur Restoring-Division (für positive Zahlen a und b).<br />

(q 2n-1 ,...,q n ) = 0, (q n-1 ,...,q 0 ) = a<br />

for i=0 to n-1 {<br />

shift left q by 1<br />

(q 2n-1 ,...,q n ) = (q 2n-1 ,...,q n ) - b<br />

if (q 2n-1 == 0)<br />

q 0 = 1<br />

else {<br />

q 0 = 0<br />

(q 2n-1 ,...,q n )=(q 2n-1 ,...,q n ) + b<br />

}<br />

}<br />

Variable q enthält dann nach n Schritten sowohl den Rest r in den Bits<br />

2n – 1, ... , n als auch den Quotienten in Bits n –1, ... , 0.<br />

[TI] Winter 2013/2014 Arithmetik 40


Direkte Implementierung<br />

in digitaler Logik ergibt<br />

serielles Dividierwerk:<br />

Dividierwerk<br />

Steuerwerk muss entsprechende Signale generieren:<br />

load q: lade q mit Dividenden a in (q n–1 ,...,q 0 )<br />

add/sub: addiere/subtrahiere b zu/von (q 2n–1 ,...,q n )<br />

in Abhängigkeit von q 2n-1<br />

shift left: schiebe q um eine Stelle nach links<br />

Effizientere Dividierwerke arbeiten ohne Korrektur („Non-<br />

Restoring“) und bestimmen je Schritt mehrere Quotientenbits.<br />

[TI] Winter 2013/2014 Arithmetik 41


FEST- UND GLEITKOMMAZAHLEN<br />

[TI] Winter 2013/2014 Arithmetik 42


Fest- und Gleitkommazahlen<br />

Sollen rationale oder reelle Zahlen auf einem Rechner<br />

bearbeitet werden, so hat der Rechnerarchitekt oder<br />

Programmierer zwei Möglichkeiten zur Auswahl:<br />

Festkommazahlen<br />

Jede Kommazahl z wird durch Skalierung auf ganze Zahl z'<br />

abgebildet; Rechner arbeitet nur auf ganzer Zahl.<br />

Gleitkommazahlen<br />

Darstellung der Kommazahl durch Mantisse und Exponent;<br />

spezielle Rechenwerke erforderlich!<br />

[TI] Winter 2013/2014 Arithmetik 43


Festkommazahlen (Wiederholung)<br />

Zahl zur Basis b mit einer festen Zahl von k Nachkommastellen:<br />

z = (z n– k–1 z n– k–2 ... z 1 z 0 , z –1 z –2 ... z –k+1 z –k ) b<br />

= z n– k–1 ⋅ b n– k–1 + z n– k–2 ⋅ b n– k–2 + ... + b 1 ⋅ z 1 + b 0 ⋅ z 0<br />

+ b –1 ⋅ z –1 + b −2 ⋅ z −2 + ... + b −k +1 ⋅ z −k +1 + b −k ⋅ z −k<br />

n<br />

∑ − k − 1<br />

i=<br />

−k<br />

z i ⋅b<br />

Die Ziffern z n– k–1 z n– k–2 ... z 1 z 0 stellen den ganzzahligen Teil, die Ziffern<br />

z −1 z −2 ... z −k stellen den gebrochenen Teil von z dar.<br />

Die feste Kommaposition k kennt nur der Anwender, der Rechner<br />

arbeitet mit skalierten ganzen Binärzahlen z´ = z ⋅ 2 k .<br />

=<br />

i<br />

Beispiel: Ein 8-Bit Register enthält die Binärzahl z´ = 01101110;<br />

für k = 3 gilt: z = 01101,110 2 = 2 3 + 2 2 + 2 0 + 2 –1 +2 –2 = 13,75 10 .<br />

Alle bislang betrachteten Rechenwerke sind somit auch für<br />

Operationen auf Festkommazahlen geeignet!<br />

[TI] Winter 2013/2014 Arithmetik 44


Gleitkommazahlen (Wiederholung)<br />

In vielen technischen und wissenschaftlichen Anwendungen wird bei<br />

Zahlen eine große Dynamik benötigt.<br />

Sehr kleine und sehr große Zahlen sollen einheitlich dargestellt werden.<br />

Dies wird möglich durch die Verwendung von Gleitkommazahlen.<br />

Allgemeine Gleitkommazahl zur Basis r („radix“) ist definiert durch<br />

x = a × r e mit:<br />

Argument oder Mantisse a<br />

Exponent oder Charakteristik e<br />

Eine Gleitkommazahl zur Basis r heißt normalisiert, wenn für die<br />

Mantisse a gilt: 1 ≤ a < r.<br />

Beispiele (für r = 10):<br />

− Die Zahl 0,0000002345 kann dargestellt werden als 2,345 × 10 –7 .<br />

− Die Zahl 1024500000,0 kann dargestellt werden als 1,0245 × 10 9 .<br />

[TI] Winter 2013/2014 Arithmetik 45


Gleitkommazahlen (Wiederholung)<br />

Eine binäre Gleitkommazahl x ist definiert durch x = a × 2 e<br />

mit m-stelliger Mantisse a<br />

und p-stelligem Exponent e<br />

Eine binäre Gleitkommazahl x ≠ 0 heißt normalisiert,<br />

wenn für die Mantisse a gilt: 1 ≤ a < 2<br />

Häufig Darstellung des Exponenten mit Bias b: x = a × 2 e−b<br />

Wahl von b = 2 p–1 – 1 bewirkt Transformation des Bereiches für<br />

den Exponenten e von 0 ... 2 p – 1 in –(2 p–1 –1) ... 2 p–1 .<br />

⇒ einfache Kodierung positiver und negativer Exponenten!<br />

Früher unterschiedliches Gleitkommaformat in jedem<br />

Prozessor, heute überwiegend Verwendung des IEEE 754<br />

St<strong>and</strong>ard.<br />

[TI] Winter 2013/2014 Arithmetik 46


IEEE 754 St<strong>and</strong>ard (1)<br />

Allgemeine Definition: x = (–1) s × 1.f × 2 e–b<br />

Mantisse aus Vorzeichen s und normalisiertem Betrag a =<br />

1.f im Bereich 1.00..00 bis 1.11..11<br />

1 vor dem Komma wird jedoch nicht kodiert ⇒ erhöhte Präzision<br />

Aufbau einer n-Bit IEEE Gleitkommazahl:<br />

p-stelliger Exponent mit Bias b = 2 p–1 –1, gültiger Exponent e nur<br />

im Bereich e min = 0 < e < e max = 2 p –1 = 2b+1<br />

Darstellbarer Zahlenbereich: ± 2 1–b ... (2–2 –m ) × 2 b<br />

Zwischen 2 e–b und 2 e−b+1 gibt es stets 2 m Gleitkommazahlen:<br />

Abst<strong>and</strong> benachbarter Gleitkommazahlen ist abhängig von e.<br />

[TI] Winter 2013/2014 Arithmetik 47


IEEE 754 St<strong>and</strong>ard (2)<br />

Drei verschiedene Formate spezifiziert:<br />

single<br />

precision<br />

double precision quad precision<br />

n 32 64 128<br />

m 23 52 112<br />

s 1 1 1<br />

p 8 11 15<br />

e min 0 0 0<br />

e max 255 2047 32767<br />

b 127 1023 16383<br />

| x min | 2 –126 ≈ 10 –38 2 –1022 ≈ 10 –308 2 –16382 ≈ 10 –4932<br />

| x max |<br />

(2–2 –23 )×2 127 ≈<br />

10 38 (2–2 –52 )×2 1023 ≈ 10 308 (2–2 –112 )×2 16383 ≈ 10 4932<br />

[TI] Winter 2013/2014 Arithmetik 48


IEEE 754 St<strong>and</strong>ard (3)<br />

e = e min = (00..00) 2 = 0 und e = e max = (11..11) 2 werden<br />

zur Kodierung besonderer Zahlen verwendet:<br />

x = +0 („positive Zero“): e = 0, f = 0, s = 0<br />

x = −0 („negative Zero“): e = 0, f = 0, s = 1<br />

x = +∞ („positive Infinity“): e = e max , f = 0, s = 0<br />

x = −∞ („negative Infinity“): e = e max , f = 0, s = 1<br />

x = NaN („Not a Number“): e = e max , f ≠ 0, s beliebig<br />

x = (–1) s × 0.f × 2 1−b („Denormalized Number“): e = 0, f ≠ 0<br />

Denormalisierte Gleitkommazahlen ermöglichen die<br />

Darstellung sehr kleiner Werte im Bereich 2 1−b−m ... 2 1−b .<br />

[TI] Winter 2013/2014 Arithmetik 49


IEEE 754 St<strong>and</strong>ard (4)<br />

Beh<strong>and</strong>lung von Ausnahmesituationen:<br />

Überlauf tritt ein, wenn nach Normalisierung für x gilt: e ≥ e max<br />

Generierung von +∞ , falls x > 0<br />

Generierung von −∞ , falls x < 0<br />

Einige Rechenregeln für ∞:<br />

∞ + x = ∞ (falls x ≠ −∞), ∞ − x = ∞ (falls x ≠ ∞),<br />

± x / 0 = ±∞ (falls x ≠ 0), ∞ ⋅ x = ±∞ (falls x ≠ 0)<br />

Einige Operationen liefern ein unbestimmtes Ergebnis, z.B.:<br />

∞ ⋅ 0 = NaN, 0 / 0 = NaN, ∞ − ∞ = NaN,<br />

Ferner gilt für alle Operationen: f (x, NaN) = NaN<br />

Unterlauf tritt ein, wenn nach Normalisierung für x gilt: e = 0<br />

Generierung von x = 0 („flushing to zero“)<br />

Generierung einer denormalisierten Darstellung von x<br />

[TI] Winter 2013/2014 Arithmetik 50


Gleitkomma-Multiplikation<br />

Algorithmus zur Multiplikation zweier IEEE-<br />

Gleitkommazahlen<br />

x = (–1) s × a × 2 α−bias und y = (–1) t × b × 2 β–bias :<br />

1) Multipliziere Mantissen als Festkommazahlen: c = a × b<br />

a = 1.f a und b = 1.f b haben m + 1 Stellen ⇒ c hat 2m + 2 Stellen!<br />

2) Addiere Exponenten: γ = α + β – bias<br />

3) Berechne Vorzeichen des Produktes: u = s ⊕ t<br />

4) Normalisiere Ergebnis: z = (–1) u × c × 2 γ-bias<br />

a) Falls c ≥ 2, schiebe c um 1 nach rechts und inkrementiere γ.<br />

b) Setze c = 1.f c = 1.(c 2m–1 c 2m–2 ... c m ) 2 mit Rundung.<br />

5) Beh<strong>and</strong>lung von Ausnahmesituationen:<br />

a) Überlauf, falls γ ≥ e max = 2 p – 1 ⇒ z := ±∞ (abhängig von u).<br />

b) Unterlauf, falls γ ≤ e min = 0 ⇒ Denormalisierung durchführen!<br />

c) Zero, falls c = 0 ⇒ z := ±0 (abhängig von u).<br />

[TI] Winter 2013/2014 Arithmetik 51


Gleitkomma-Addition (1)<br />

Algorithmus zur Addition zweier IEEE-Gleitkommazahlen<br />

x = (–1) s × a × 2 α−bias und y = (–1) t × b × 2 β−bias :<br />

1) Sortiere x und y, so dass x die Zahl mit kleinerem Exponenten ist.<br />

2) Anpassung der Exponenten: Bestimme x´ = (– 1) s × a´× 2 β−bias<br />

durch Rechtsschieben von a um β − α Bitpositionen.<br />

3) Addiere Mantissen:<br />

a) Falls nötig, bilde Zweierkomplement von a´ oder b.<br />

b) Führe Festkomma-Addition c = a´ + b aus.<br />

c) Falls c < 0, setze u = 1 und bilde Zweierkomplement von c.<br />

4) Normalisiere Ergebnis: z = (– 1) u × c × 2 β–bias<br />

a) Falls c ≥ 2, schiebe c nach rechts und inkrementiere β.<br />

b) Falls c < 1, schiebe c nach links und dekrementiere β.<br />

ggf. wiederhole b), bis 1 ≤ c < 2.<br />

5) Beh<strong>and</strong>lung von Ausnahmesituationen: Überlauf, Unterlauf, c=0<br />

[TI] Winter 2013/2014 Arithmetik 52


Gleitkomma-Addition (2)<br />

Möglicher Aufbau eines Gleitkomma-Addierwerks:<br />

[TI] Winter 2013/2014 Arithmetik 53


Literatur<br />

[Herold 2007] H. Herold, B. Lurz, J. Wohlrab, Grundlagen<br />

der Informatik, Pearson, 1. Auflage, 2007<br />

[TI] Winter 2013/2014 Arithmetik 54

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!