Computer and Communication Systems (Lehrstuhl für Technische Informatik) Arithmetik Zahlendarstellung, Addition und Subtraktion Multiplikation, Division, Fest- und Gleitkommazahlen [TI] Winter 2013/2014 Arithmetik 1
Lernziele Realisierung von Rechenwerken für alle vier arithmetischen Grundoperationen (+,, *, /) auf ganzen Zahlen mit Implementierung als Schaltnetz bzw. Schaltwerk Abschätzung des Zeitbedarfs für eine Operation Möglichkeiten der Beschleunigung Behandlung negativer Zahlen Darstellung und Rechnen von/mit Festkommazahlen Verständnis von Gleitkommazahlen Aufbau gemäß IEEE 754 Standard Algorithmen für Grundoperationen Realisierung von Rechenwerken [TI] Winter 2013/2014 Arithmetik 2
ZAHLENDARSTELLUNG [TI] Winter 2013/2014 Arithmetik 3
Zahlendarstellungen im Rechner Ausschließliche Verwendung von Binärzahlen, die auf Worte einer Breite von n Bit abgebildet werden. Im Prozessor stehen zur Speicherung ganzer Zahlen mehrere n- Bit Register (realisiert durch n Flip-Flops) zur Verfügung. Typische Wortbreiten: n = 8: n = 16: n = 32: n = 64: Byte, in Mikroprozessoren der ersten Generation, wie z.b. Intel 8080 oder Z80 Halbwort (bei Intel: Wort) in Minicomputern und Mikroprozessoren der zweiten Generation, wie z.b. PDP-11, Intel 8086, Motorola 68000 Wort (bei Intel: Doppelwort) in Mikroprozessoren der dritten Generation, z.b. Intel Pentium, Motorola 68030 Doppelwort (bei Intel: Quadwort) in aktuellen Hochleistungsprozessoren, z.b. PowerPC, AMD Opteron. [TI] Winter 2013/2014 Arithmetik 4
Darstellung von Zahlen (Wiederholung) Darstellung positiver ganzer Zahlen in positionaler Notation (auch als Stellenwertsystem bezeichnet). Jede natürliche Zahl z mit 0 z b n 1 ist eindeutig als n-stellige Zahl zur Basis b darstellbar. Darstellung negativer ganzer Zahlen: Vorzeichen und Betrag (b-1)-komplement (Bei Binärzahlen: Einerkomplement) b-komplement (Bei Binärzahlen: Zweierkomplement) Details: Siehe Vorlesung Praktische Informatik! [TI] Winter 2013/2014 Arithmetik 5
ADDITION UND SUBTRAKTION [TI] Winter 2013/2014 Arithmetik 6
Addition (1) Addition zweier positiver n-stelliger Binärzahlen a und b kann stellenweise von rechts nach links durchgeführt werden. Der handschriftlichen Addition zweier Dezimalzahlen entsprechend! In jeder Stelle i kann ein Übertrag c i = 1 auftreten (Carry). Gilt für die Summe s = a + b 2 n, so kann das Ergebnis nicht mehr als n-bit Zahl dargestellt werden. Es entsteht ein (n+1)-tes Summenbit, das als Überlauf (Overflow) bezeichnet wird. [TI] Winter 2013/2014 Arithmetik 7
Addition (2) Addition der niedrigstwertigen Bits von a und b erfordert einen Halbaddierer, der aus a 0 und b 0 sowohl die Summe s 0 als auch den Übertrag (Carry) c 0 ermittelt. Verzögerung für c 0 : τ (mit τ = Laufzeit eines elementaren Gatters) Verzögerung für s 0 : 2τ [TI] Winter 2013/2014 Arithmetik 8
Addition (3) Addition von a i, b i und c i 1 an den Bitpositionen i = 1,..., n 1 erfordert einen Volladdierer (FA = Full Adder), der die Summe s i und den Übertrag c i bestimmt: Verzögerung je nach Pfad und Realisierung: 2τ bis 4τ [TI] Winter 2013/2014 Arithmetik 9
Einfache Addierwerke (1) Serielles binäres Addierwerk: Benötigt nur einen Volladdierer, ein Flip-Flop und drei n-bit Schieberegister (für Summanden a, b und Ergebnis s): Synchrones Schaltwerk Flip-Flop muss jedoch zuvor initialisiert werden. In Takt i wird Ergebnisbit s i aus a i, b i und c i 1 bestimmt. Addition von zwei n-bit Zahlen benötigt n Taktzyklen. [TI] Winter 2013/2014 Arithmetik 10
Einfache Addierwerke (2) Paralleles binäres Addierwerk: n Volladdierer ermöglichen Addition zweier n-bit Zahlen: An Bitposition 0 genügt bei der Addition zweier positiver Zahlen auch ein Halbaddierer. Im ungünstigen Fall kann ein an Position 0 entstehender Übertrag die Bitstellen 1 bis n 1 durchlaufen und s 1 bis s n 1 verändern. Wird daher auch als Ripple Carry - Addierer (RCA) bezeichnet. Resultierende maximale Verzögerung: 2τ + (n 1) 2τ = 2nτ [TI] Winter 2013/2014 Arithmetik 11
Carry Look-Ahead Addierwerk (1) Für eine schnelle Addition ist RCA mit einer maximalen Verzögerung von 2nτ ungeeignet. Gibt es auch eine schnellere Möglichkeit, zwei n-bit Zahlen zu addieren? Idee: Ersetzung des sequentiellen Übertragdurchlaufs durch eine parallele Vorausberechnung aller Überträge c i. Ansatz: Betrachte i-ten Volladdierer eines RCA. Es gilt: c i = a i b i + (a i + b i ) c i 1 := G i + P i c i 1 Generate : G i = a i b i gibt an, ob in Stelle i ein Übertrag erzeugt wird. Propagate : P i = a i + b i gibt an, ob in Stelle i ein Übertrag propagiert wird (P i = 1) oder nicht (P i = 0). [TI] Winter 2013/2014 Arithmetik 12
Carry Look-Ahead Addierwerk (2) Für die Überträge c i ergibt sich somit: c 0 = a 0 b 0 := G 0 c 1 = a 1 b 1 + (a 1 + b 1 )c 0 := G 1 + P 1 G 0 c 2 = G 2 + P 2 G 1 + P 2 P 1 G 0 c 3 = G 3 + P 3 G 2 + P 3 P 2 G 1 + P 3 P 2 P 1 G 0 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 c 5 =... Verzögerung Zur Bestimmung aller P i und G i : τ Zur Bestimmung aller Signale c i bei gegebenen P i und G i : 2τ Jedoch werden zur Bestimmung von c i mehrere große UND-Gatter mit max. i +1 Eingängen und ein großes ODER-Gatter mit i +1 Eingängen benötigt. Annahme eines einheitlichen τ ist unrealistisch! [TI] Winter 2013/2014 Arithmetik 13
Carry Look-Ahead Addierwerk (3) Aufbau eines Carry Look-Ahead Addierers (CLA) für n = 4 Bit: hier mit P i = a i b i anstatt P i = a i + b i [TI] Winter 2013/2014 Arithmetik 14
Carry Look-Ahead Addierwerk (4) Ein vollständiger n-bit CLA benötigt zur Addition zweier n-bit Zahlen die Zeit 5τ (unabhängig von n)! Probleme des vollständigen n-bit CLA Hoher Aufwand für große n Gatter mit bis zu n + 1 Eingängen erforderlich. Hoher fan-in Gatterausgänge P i und G i sind mit bis zu (n +1) 2 / 4 Gattereingängen verschaltet. Hoher fan-out Vollständiger CLA ist nicht praktikabel! Kombination von RCA und CLA als Alternative: [TI] Winter 2013/2014 Arithmetik 15
Subtraktion (1) Statt der Entwicklung eines eigenen Subtrahierwerkes kann bei Verwendung des Zweierkomplements jedes Addierwerk auch zur Subtraktion verwendet werden. Ansatz: a b = a + ( b) Realisierung für zwei n-stellige Zahlen a und b: Invertierung aller Bits b i Addition von 1 zur Bildung des Zweierkomplements b Kann z.b. in den zuvor besprochenen Addierwerken durch Setzen von c in = 1 ohne zusätzlichen Hardwareaufwand erreicht werden! Addition von a und ( b) Summe ist korrekt, wenn Überlaufbit c n 1 ignoriert wird. Überlauf v tritt nur dann ein, wenn gilt: c n 1 c n 2 [TI] Winter 2013/2014 Arithmetik 16
Subtraktion (2) Realisierung eines n-bit Addier-/Subtrahierwerkes Addition a + b bei S = 0, Subtraktion a b bei S = 1 Invertieren der Bits b i bei S = 1 durch XOR-Gatter Intern ist jedes beliebige n-bit Addierwerk verwendbar! [Herold 2007] [TI] Winter 2013/2014 Arithmetik 17
Subtraktion (3) Einige Beispiele zur Addition von im Zweierkomplement kodierten positiven und negativen 8-Bit Zahlen: [TI] Winter 2013/2014 Arithmetik 18
Subtraktion (4) Drei Fälle bei der Addition im Zweierkomplement: 1) Zahlen a und b positiv (d.h. a n-1 = b n-1 = 0) Überlauf bei s n-1 = 1 (tritt auf bei c n-1 = 0, c n-2 = 1) 2) Zahlen a und b negativ (d.h. a n-1 = b n-1 = 1) nun sind a = a und b = b positiv, somit gilt: sum = a + b = (2 n a ) + (2 n b ) = 2 2 n (a + b ) korrektes Ergebnis wäre jedoch: s = 2 n (a + b ) = sum 2 n erforderliche Korrektur: Überlaufbit c n-1 ignorieren Überlauf bei s n-1 = 0 (tritt auf bei c n-1 = 1, c n-2 = 0) 3) Vorzeichen von a und b unterschiedlich (b sei negativ): sum = a + b = a + (2 n b ) = 2 n (b a) ist korrekt für b > a, korrektes Ergebnis für b < a wäre jedoch: s = a b = sum 2 n erforderliche Korrektur: Überlaufbit c n-1 ignorieren kein Überlauf möglich! [TI] Winter 2013/2014 Arithmetik 19
ALU (1) ALU = Arithmetic Logic Unit Realisiert die Elementaroperationen eines Rechners (arithmetische Operationen wie Addition und Subtraktion als auch logische Operationen wie AND und OR). Aus zwei Eingangswerten X und Y wird ein Ergebniswert Z gebildet. X, Y und Z sind meist Register. Typische Registerbreiten sind 8, 16, 32, 64 Bits. Dementsprechend spricht man von 8-, 16-, 32- und 64-Bit-Rechner. Bei der Ausführung von Operationen können bestimmte Zusatzinformationen anfallen. Deshalb gibt es noch ein Flag-Register, in dem entsprechende Bits gesetzt werden, wenn bei der ausgeführten Operation ein entsprechendes Ergebnis aufgetreten ist. [TI] Winter 2013/2014 Arithmetik 20
ALU (2) [Herold 2007] [TI] Winter 2013/2014 Arithmetik 21
ALU (3) [Herold 2007] s2 unterscheidet zwischen arithmetischen und logischen Operationen bzw. zwischen Konstanten 0 und 1. s1 und s0 wählen konkrete Operation (arithmetisch bzw. logisch). [TI] Winter 2013/2014 Arithmetik 22
Schaltungsrealisierung einer n-bit-alu [TI] Winter 2013/2014 Arithmetik 23 [Herold 2007]
MULTIPLIKATION [TI] Winter 2013/2014 Arithmetik 24
Multiplikation (1) Algorithmus zur Multiplikation zweier positiver Binärzahlen a und b entspricht der handschriftlichen Multiplikation zweier positiver Dezimalzahlen. Produkt p zweier positiver n-bit Binärzahlen hat 2n Bitstellen. Algorithmus ist zurückführbar auf wiederholte bedingte Additionen und Schiebeoperationen. [TI] Winter 2013/2014 Arithmetik 25
Multiplikation (2) Modifizierter Algorithmus: Beispiel für n = 5 (vgl. letzte Folie): In der 2n-Bit Variablen p werden n partielle Produkte addiert. Rechtsschieben von p ersetzt das Linksschieben von a. [TI] Winter 2013/2014 Arithmetik 26
Multiplizierwerke (1) Implementierung A: Serielles Schaltwerk Direkte Umsetzung des modifizierten Algorithmus in digitaler Logik Bedingte Addition mittels UND Steuerwerk muss Signale erzeugen: clear p: setze p = 0 shift right: schiebe b um eine Position nach rechts load and shift right: schiebe p um eine Position nach rechts und lade p 2n-1... p n parallel Zur Berechnung von p sind n Taktzyklen erforderlich! [TI] Winter 2013/2014 Arithmetik 27
Multiplizierwerke (2) Implementierung B: Feldmultiplizierer ( array multiplier ) Direkte Realisierung des handschriftlichen Multiplikationsschemas für Binärzahlen a und b in digitaler Logik. Es werden zunächst alle Bitprodukte a j b i ermittelt. Für jedes Multiplikatorbit b i wird hieraus ein partielles Produkt q i = (a n 1 b i a n 2 b i... a 1 b i a 0 b i ) 2 = a b i gebildet. Die n partiellen Produkte q i werden jeweils um i Bitpositionen nach links verschoben und aufaddiert. Beispiel für n = 4: [TI] Winter 2013/2014 Arithmetik 28
Multiplizierwerke (3) Einfache Implementierung mittels Multipliziererzellen aus jeweils einem Volladdierer und einem UND-Gatter: Maximale Zeit zur Multiplikation zweier 4-Bit Zahlen: 21τ Maximale Zeit zur Multiplikation zweier n-bit Zahlen: (6n 3)τ [TI] Winter 2013/2014 Arithmetik 29
Multiplizierwerke (4) Implementierung C: CSA-Kette / CSA-Baum Zur Bildung des Produktes p zweier n-bit Zahlen müssen n partielle Produkte q i = a b i aufaddiert werden. Zur schnellen Addition vieler Zahlen bieten sich Carry Save Addierer (CSA) an, bei denen entstehende Überträge erst bei der Addition des nächsten Summanden berücksichtigt werden. Ein m-bit CSA-Baustein ermöglicht eine partielle Addition von drei m-bit Zahlen. Für eine Addition von k Zahlen werden k 2 CSA-Bausteine benötigt. Ein zusätzlicher RCA oder CLA dient der Addition der am Ende noch verbleibenden Überträge. [TI] Winter 2013/2014 Arithmetik 30
Multiplizierwerke (5) Beispiel: 4-Bit CSA zur Addition von fünf 4-Bit Zahlen u, v, w, x, y [TI] Winter 2013/2014 Arithmetik 31
Multiplizierwerke (6) Zur Addition der n partiellen Produkte q i = a b i werden n 2 schnelle CSA-Addierer benötigt. Anordnung der Addierer z.b. als CSA-Kette, hier für n = 6. In jeder Stufe sind einige Bits des Produkts p berechnet. Zeit zur Multiplikation zweier n-bit Zahlen: (2n 3)τ + t Add Für einen CLA gilt z.b. t Add = 5τ Weitere Beschleunigung durch Anordnung als CSA-Baum. [TI] Winter 2013/2014 Arithmetik 32
Multiplizierwerke (7) Implementierung D: Zweistufiges Schaltnetz Idee: Realisierung eines n n Bit Multiplizierers als zweistufiges Schaltnetz mit 2n Eingängen und 2n Ausgängen. Sehr geringe Zeitverzögerung: nur 2τ. Implementierung z.b. durch ein ROM oder PROM mit 2 2n Zeilen aus 2n-Bit Worten. Jedoch sehr hoher Speicheraufwand: n Produkt 2n Zeilen 2 2n PROM Größe 2 4 16 64 Bit 4 8 256 256 Byte 8 16 65536 128 KByte 16 32 4.3 10 9 1.6 GByte [TI] Winter 2013/2014 Arithmetik 33
Multiplikation negativer Zahlen (1) Bislang Betrachtung ausschließlich positiver Multiplikatoren und Multiplikanden. Was passiert bei negativen im Zweierkomplement kodierten n-bit Multiplikatoren bzw. n-bit Multiplikanden? a ( b) = a (2 n b) = a 2 n a b (statt 2 2n a b) ( a) b = (2 n a) b = b 2 n a b (statt 2 2n a b) ( a) ( b) = (2 n a) (2 n b) = 2 2n a 2 n b 2 n + a b (statt a b) Ohne besondere Maßnahme liefert binärer Multiplizierer falsche Ergebnisse! Jedoch aufwendige Addition von Korrekturtermen möglich. Man addiert Term um auf das gewünschte Ergebnis zu kommen. Alternative: Trennung von Vorzeichen und Betrag. Hoher Aufwand für Umwandlung von Zahlen vor/nach der Multiplikation. [TI] Winter 2013/2014 Arithmetik 34
Multiplikation negativer Zahlen (2) Idee: Vereinfachung der Multiplikation, wenn Multiplikator eine 1-Folge repräsentiert: a 111 = a 1000 a 0001 Auch innerhalb längerer Bitfolgen möglich. z.b. a 0011100 = a 0100000 a 0000100 Multiplikation mit einer 1-Folge lässt sich stets durch eine Addition und eine Subtraktion ersetzen. Der Algorithmus nach Booth analysiert zwei benachbarte Bits b i und b i 1 des Multiplikators: (b i b i 1 ) 2 = 01 2 : Addition von a 2 i (b i b i 1 ) 2 = 10 2 : Subtraktion von a 2 i (b i b i 1 ) 2 = 00 2 oder (b i b i 1 ) 2 = 11 2 : keine Addition Ergänzung von b 1 = 0 erforderlich. [TI] Winter 2013/2014 Arithmetik 35
Multiplikation negativer Zahlen (3) Realisierung der Subtraktion von a 2 i durch Addition des Zweierkomplements (vorzeichenrichtig ergänzt). Beispiele (mit n = 5): Funktioniert für beliebige positive und negative Multiplikanden und Multiplikatoren! [TI] Winter 2013/2014 Arithmetik 36
DIVISION [TI] Winter 2013/2014 Arithmetik 37
Division (1) Umkehrung der Multiplikation: Berechnung von q = a / b durch wiederholte bedingte Subtraktionen und Schiebeoperationen. In jedem Schritt wird Divisor b testweise vom Dividenden a subtrahiert: q i = 1, falls a b > 0 q i = 0 und Korrektur durch a = a + b, falls a b < 0 Dieses Verfahren wird auch als Restoring - Division bezeichnet. Allgemein gilt: Dividend / Divisor = Quotient + Rest / Divisor bzw.: Dividend = Divisor Quotient + Rest [TI] Winter 2013/2014 Arithmetik 38
Division (2) Beispiel: 29 10 / 5 10 = 5 10 mit Rest 4 10 [TI] Winter 2013/2014 Arithmetik 39
Division (3) Aufgabenstellung hier: n-bit Dividend a, n-bit Divisor b Ergebnis: n-bit Quotient q, n-bit Rest r Es wird intern eine 2n-Bit Variable q = (q 2n-1,...,q 0 ) verwendet. Algorithmus zur Restoring-Division (für positive Zahlen a und b). (q 2n-1,...,q n ) = 0, (q n-1,...,q 0 ) = a for i=0 to n-1 { shift left q by 1 (q 2n-1,...,q n ) = (q 2n-1,...,q n ) - b if (q 2n-1 == 0) q 0 = 1 else { q 0 = 0 (q 2n-1,...,q n )=(q 2n-1,...,q n ) + b } } Variable q enthält dann nach n Schritten sowohl den Rest r in den Bits 2n 1,..., n als auch den Quotienten in Bits n 1,..., 0. [TI] Winter 2013/2014 Arithmetik 40
Direkte Implementierung in digitaler Logik ergibt serielles Dividierwerk: Dividierwerk Steuerwerk muss entsprechende Signale generieren: load q: lade q mit Dividenden a in (q n 1,...,q 0 ) add/sub: addiere/subtrahiere b zu/von (q 2n 1,...,q n ) in Abhängigkeit von q 2n-1 shift left: schiebe q um eine Stelle nach links Effizientere Dividierwerke arbeiten ohne Korrektur ( Non- Restoring ) und bestimmen je Schritt mehrere Quotientenbits. [TI] Winter 2013/2014 Arithmetik 41
FEST- UND GLEITKOMMAZAHLEN [TI] Winter 2013/2014 Arithmetik 42
Fest- und Gleitkommazahlen Sollen rationale oder reelle Zahlen auf einem Rechner bearbeitet werden, so hat der Rechnerarchitekt oder Programmierer zwei Möglichkeiten zur Auswahl: Festkommazahlen Jede Kommazahl z wird durch Skalierung auf ganze Zahl z' abgebildet; Rechner arbeitet nur auf ganzer Zahl. Gleitkommazahlen Darstellung der Kommazahl durch Mantisse und Exponent; spezielle Rechenwerke erforderlich! [TI] Winter 2013/2014 Arithmetik 43
Festkommazahlen (Wiederholung) Zahl zur Basis b mit einer festen Zahl von k Nachkommastellen: z = (z n k 1 z n k 2... z 1 z 0, z 1 z 2... z k+1 z k ) b = z n k 1 b n k 1 + z n k 2 b n k 2 +... + b 1 z 1 + b 0 z 0 + b 1 z 1 + b 2 z 2 +... + b k +1 z k +1 + b k z k n k 1 i= k z i b Die Ziffern z n k 1 z n k 2... z 1 z 0 stellen den ganzzahligen Teil, die Ziffern z 1 z 2... z k stellen den gebrochenen Teil von z dar. Die feste Kommaposition k kennt nur der Anwender, der Rechner arbeitet mit skalierten ganzen Binärzahlen z = z 2 k. = i Beispiel: Ein 8-Bit Register enthält die Binärzahl z = 01101110; für k = 3 gilt: z = 01101,110 2 = 2 3 + 2 2 + 2 0 + 2 1 +2 2 = 13,75 10. Alle bislang betrachteten Rechenwerke sind somit auch für Operationen auf Festkommazahlen geeignet! [TI] Winter 2013/2014 Arithmetik 44
Gleitkommazahlen (Wiederholung) In vielen technischen und wissenschaftlichen Anwendungen wird bei Zahlen eine große Dynamik benötigt. Sehr kleine und sehr große Zahlen sollen einheitlich dargestellt werden. Dies wird möglich durch die Verwendung von Gleitkommazahlen. Allgemeine Gleitkommazahl zur Basis r ( radix ) ist definiert durch x = a r e mit: Argument oder Mantisse a Exponent oder Charakteristik e Eine Gleitkommazahl zur Basis r heißt normalisiert, wenn für die Mantisse a gilt: 1 a < r. Beispiele (für r = 10): Die Zahl 0,0000002345 kann dargestellt werden als 2,345 10 7. Die Zahl 1024500000,0 kann dargestellt werden als 1,0245 10 9. [TI] Winter 2013/2014 Arithmetik 45
Gleitkommazahlen (Wiederholung) Eine binäre Gleitkommazahl x ist definiert durch x = a 2 e mit m-stelliger Mantisse a und p-stelligem Exponent e Eine binäre Gleitkommazahl x 0 heißt normalisiert, wenn für die Mantisse a gilt: 1 a < 2 Häufig Darstellung des Exponenten mit Bias b: x = a 2 e b Wahl von b = 2 p 1 1 bewirkt Transformation des Bereiches für den Exponenten e von 0... 2 p 1 in (2 p 1 1)... 2 p 1. einfache Kodierung positiver und negativer Exponenten! Früher unterschiedliches Gleitkommaformat in jedem Prozessor, heute überwiegend Verwendung des IEEE 754 Standard. [TI] Winter 2013/2014 Arithmetik 46
IEEE 754 Standard (1) Allgemeine Definition: x = ( 1) s 1.f 2 e b Mantisse aus Vorzeichen s und normalisiertem Betrag a = 1.f im Bereich 1.00..00 bis 1.11..11 1 vor dem Komma wird jedoch nicht kodiert erhöhte Präzision Aufbau einer n-bit IEEE Gleitkommazahl: p-stelliger Exponent mit Bias b = 2 p 1 1, gültiger Exponent e nur im Bereich e min = 0 < e < e max = 2 p 1 = 2b+1 Darstellbarer Zahlenbereich: ± 2 1 b... (2 2 m ) 2 b Zwischen 2 e b und 2 e b+1 gibt es stets 2 m Gleitkommazahlen: Abstand benachbarter Gleitkommazahlen ist abhängig von e. [TI] Winter 2013/2014 Arithmetik 47
IEEE 754 Standard (2) Drei verschiedene Formate spezifiziert: single precision double precision quad precision n 32 64 128 m 23 52 112 s 1 1 1 p 8 11 15 e min 0 0 0 e max 255 2047 32767 b 127 1023 16383 x min 2 126 10 38 2 1022 10 308 2 16382 10 4932 x max (2 2 23 ) 2 127 10 38 (2 2 52 ) 2 1023 10 308 (2 2 112 ) 2 16383 10 4932 [TI] Winter 2013/2014 Arithmetik 48
IEEE 754 Standard (3) e = e min = (00..00) 2 = 0 und e = e max = (11..11) 2 werden zur Kodierung besonderer Zahlen verwendet: x = +0 ( positive Zero ): e = 0, f = 0, s = 0 x = 0 ( negative Zero ): e = 0, f = 0, s = 1 x = + ( positive Infinity ): e = e max, f = 0, s = 0 x = ( negative Infinity ): e = e max, f = 0, s = 1 x = NaN ( Not a Number ): e = e max, f 0, s beliebig x = ( 1) s 0.f 2 1 b ( Denormalized Number ): e = 0, f 0 Denormalisierte Gleitkommazahlen ermöglichen die Darstellung sehr kleiner Werte im Bereich 2 1 b m... 2 1 b. [TI] Winter 2013/2014 Arithmetik 49
IEEE 754 Standard (4) Behandlung von Ausnahmesituationen: Überlauf tritt ein, wenn nach Normalisierung für x gilt: e e max Generierung von +, falls x > 0 Generierung von, falls x < 0 Einige Rechenregeln für : + x = (falls x ), x = (falls x ), ± x / 0 = ± (falls x 0), x = ± (falls x 0) Einige Operationen liefern ein unbestimmtes Ergebnis, z.b.: 0 = NaN, 0 / 0 = NaN, = NaN, Ferner gilt für alle Operationen: f (x, NaN) = NaN Unterlauf tritt ein, wenn nach Normalisierung für x gilt: e = 0 Generierung von x = 0 ( flushing to zero ) Generierung einer denormalisierten Darstellung von x [TI] Winter 2013/2014 Arithmetik 50
Gleitkomma-Multiplikation Algorithmus zur Multiplikation zweier IEEE- Gleitkommazahlen x = ( 1) s a 2 α bias und y = ( 1) t b 2 β bias : 1) Multipliziere Mantissen als Festkommazahlen: c = a b a = 1.f a und b = 1.f b haben m + 1 Stellen c hat 2m + 2 Stellen! 2) Addiere Exponenten: γ = α + β bias 3) Berechne Vorzeichen des Produktes: u = s t 4) Normalisiere Ergebnis: z = ( 1) u c 2 γ-bias a) Falls c 2, schiebe c um 1 nach rechts und inkrementiere γ. b) Setze c = 1.f c = 1.(c 2m 1 c 2m 2... c m ) 2 mit Rundung. 5) Behandlung von Ausnahmesituationen: a) Überlauf, falls γ e max = 2 p 1 z := ± (abhängig von u). b) Unterlauf, falls γ e min = 0 Denormalisierung durchführen! c) Zero, falls c = 0 z := ±0 (abhängig von u). [TI] Winter 2013/2014 Arithmetik 51
Gleitkomma-Addition (1) Algorithmus zur Addition zweier IEEE-Gleitkommazahlen x = ( 1) s a 2 α bias und y = ( 1) t b 2 β bias : 1) Sortiere x und y, so dass x die Zahl mit kleinerem Exponenten ist. 2) Anpassung der Exponenten: Bestimme x = ( 1) s a 2 β bias durch Rechtsschieben von a um β α Bitpositionen. 3) Addiere Mantissen: a) Falls nötig, bilde Zweierkomplement von a oder b. b) Führe Festkomma-Addition c = a + b aus. c) Falls c < 0, setze u = 1 und bilde Zweierkomplement von c. 4) Normalisiere Ergebnis: z = ( 1) u c 2 β bias a) Falls c 2, schiebe c nach rechts und inkrementiere β. b) Falls c < 1, schiebe c nach links und dekrementiere β. ggf. wiederhole b), bis 1 c < 2. 5) Behandlung von Ausnahmesituationen: Überlauf, Unterlauf, c=0 [TI] Winter 2013/2014 Arithmetik 52
Gleitkomma-Addition (2) Möglicher Aufbau eines Gleitkomma-Addierwerks: [TI] Winter 2013/2014 Arithmetik 53
Literatur [Herold 2007] H. Herold, B. Lurz, J. Wohlrab, Grundlagen der Informatik, Pearson, 1. Auflage, 2007 [TI] Winter 2013/2014 Arithmetik 54