Computer and Communication Systems (Lehrstuhl für Technische Informatik) Arithmetik Zahlendarstellung, Addition und Subtraktion Multiplikation, Division, Fest- und Gleitkommazahlen [TI] Winter 2012/2013 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 2012/2013 Arithmetik 2 ZAHLENDARSTELLUNG [TI] Winter 2012/2013 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 nBit Register (realisiert durch n Flip-Flops) zur Verfügung. Typische Wortbreiten: n = 8: n = 16: n = 32: n = 64: [TI] Winter 2012/2013 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 Operon. 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 ≤ bn –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 2012/2013 Arithmetik 5 ADDITION UND SUBTRAKTION [TI] Winter 2012/2013 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 ci = 1 auftreten (Carry). Gilt für die Summe s = a + b ≥ 2n, 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 2012/2013 Arithmetik 7 Addition (2) Addition der niedrigstwertigen Bits von a und b erfordert einen Halbaddierer, der aus a0 und b0 sowohl die Summe s0 als auch den Übertrag (Carry) c0 ermittelt. Verzögerung für c0: τ (mit τ = Laufzeit eines elementaren Gatters) Verzögerung für s0: 2τ [TI] Winter 2012/2013 Arithmetik 8 Addition (3) Addition von ai, bi und ci–1 an den Bitpositionen i = 1, ... , n–1 erfordert einen Volladdierer (FA = Full Adder), der die Summe si und den Übertrag ci bestimmt: Verzögerung je nach Pfad und Realisierung: 2τ bis 4τ [TI] Winter 2012/2013 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 si aus ai, bi und ci–1 bestimmt. Addition von zwei n-Bit Zahlen benötigt n Taktzyklen. [TI] Winter 2012/2013 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 s1 bis sn–1 verändern. Wird daher auch als „Ripple Carry“ - Addierer (RCA) bezeichnet. Resultierende maximale Verzögerung: 2τ + (n –1) ⋅ 2τ = 2nτ [TI] Winter 2012/2013 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 ci. Ansatz: Betrachte i-ten Volladdierer eines RCA. Es gilt: ci = ai ⋅ bi + (ai + bi) ⋅ ci–1 := Gi + Pi ⋅ ci–1 „Generate“: Gi = ai ⋅ bi gibt an, ob in Stelle i ein Übertrag erzeugt wird. „Propagate“: Pi = ai + bi gibt an, ob in Stelle i ein Übertrag propagiert wird (Pi = 1) oder nicht (Pi = 0). [TI] Winter 2012/2013 Arithmetik 12 Carry Look-Ahead Addierwerk (2) Für die Überträge ci ergibt sich somit: c0 = a0b0 := G0 c1 = a1b1 + (a1 + b1)c0 := G1 + P1G0 c2 = G2 + P2G1 + P2P1G0 c3 = G3 + P3G2 + P3P2G1 + P3P2P1G0 c4 = G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1G0 c5 = ... Verzögerung Zur Bestimmung aller Pi und Gi : τ Zur Bestimmung aller Signale ci bei gegebenen Pi und Gi : 2τ Jedoch werden zur Bestimmung von ci 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 2012/2013 Arithmetik 13 Carry Look-Ahead Addierwerk (3) Aufbau eines Carry Look-Ahead Addierers (CLA) für n = 4 Bit: hier mit Pi = ai ⊕ bi anstatt Pi = ai + bi [TI] Winter 2012/2013 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 Pi und Gi 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 2012/2013 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 bi Addition von 1 zur Bildung des Zweierkomplements –b Kann z.B. in den zuvor besprochenen Addierwerken durch Setzen von cin = 1 ohne zusätzlichen Hardwareaufwand erreicht werden! Addition von a und (−b) Summe ist korrekt, wenn Überlaufbit cn–1 ignoriert wird. Überlauf v tritt nur dann ein, wenn gilt: cn–1 ≠ cn–2 [TI] Winter 2012/2013 Arithmetik 16 Subtraktion (2) Realisierung eines n-Bit Addier-/Subtrahierwerkes [Herold 2007] Addition a + b bei S = 0, Subtraktion a – b bei S = 1 Invertieren der Bits bi bei S = 1 durch XOR-Gatter Intern ist jedes beliebige n-Bit Addierwerk verwendbar! [TI] Winter 2012/2013 Arithmetik 17 Subtraktion (3) Einige Beispiele zur Addition von im Zweierkomplement kodierten positiven und negativen 8-Bit Zahlen: [TI] Winter 2012/2013 Arithmetik 18 Subtraktion (4) Drei Fälle bei der Addition im Zweierkomplement: 1) Zahlen a und b positiv (d.h. an-1= bn-1= 0) Überlauf bei sn-1 = 1 (tritt auf bei cn-1 = 0, cn-2 = 1) 2) Zahlen a und b negativ (d.h. an-1= bn-1= 1) nun sind a´= −a und b´= −b positiv, somit gilt: sum = a + b = (2n – a´) + (2n – b´) = 2 ⋅ 2n – (a´+ b´) korrektes Ergebnis wäre jedoch: s = 2n – (a´+ b´) = sum – 2n ⇒ erforderliche Korrektur: Überlaufbit cn-1 ignorieren Überlauf bei sn-1 = 0 (tritt auf bei cn-1 = 1, cn-2 = 0) 3) Vorzeichen von a und b unterschiedlich (b sei negativ): sum = a + b = a + (2n – b´) = 2n – (b´− a) ist korrekt für |b| > |a|, korrektes Ergebnis für |b|<|a| wäre jedoch: s = a − b´ = sum – 2n ⇒ erforderliche Korrektur: Überlaufbit cn-1 ignorieren kein Überlauf möglich! [TI] Winter 2012/2013 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 2012/2013 Arithmetik 20 ALU (2) [Herold 2007] [TI] Winter 2012/2013 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 2012/2013 Arithmetik 22 Schaltungsrealisierung einer n-Bit-ALU [TI] Winter 2012/2013 Arithmetik [Herold 2007] 23 MULTIPLIKATION [TI] Winter 2012/2013 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 2012/2013 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 2012/2013 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 p2n-1 ... pn parallel Zur Berechnung von p sind n Taktzyklen erforderlich! [TI] Winter 2012/2013 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 aj ⋅ bi ermittelt. Für jedes Multiplikatorbit bi wird hieraus ein partielles Produkt qi = (an–1bi an–2bi ... a1bi a0bi)2 = a bi gebildet. Die n partiellen Produkte qi werden jeweils um i Bitpositionen nach links verschoben und aufaddiert. Beispiel für n = 4: [TI] Winter 2012/2013 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 2012/2013 Arithmetik 29 Multiplizierwerke (4) Implementierung C: CSA-Kette / CSA-Baum Zur Bildung des Produktes p zweier n-Bit Zahlen müssen n partielle Produkte qi = a bi 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 2012/2013 Arithmetik 30 Multiplizierwerke (5) Beispiel: 4-Bit CSA zur Addition von fünf 4-Bit Zahlen u, v, w, x, y [TI] Winter 2012/2013 Arithmetik 31 Multiplizierwerke (6) Zur Addition der n partiellen Produkte qi = a bi 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)τ + tAdd Für einen CLA gilt z.B. tAdd = 5τ Weitere Beschleunigung durch Anordnung als CSA-Baum. [TI] Winter 2012/2013 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 22n Zeilen aus 2n-Bit Worten. Jedoch sehr hoher Speicheraufwand: [TI] Winter 2012/2013 n Produkt 2n Zeilen 22n PROM Größe 2 4 16 64 Bit 4 8 256 256 Byte 8 16 65536 128 KByte 16 32 Arithmetik 4.3 ⋅ 109 1.6 GByte 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 ⋅ (2n – b) = a ⋅ 2n – a ⋅ b (statt 22n – a ⋅ b) (statt 22n – a ⋅ b) (– a) ⋅ b = (2n – a) ⋅ b = b ⋅ 2n – a ⋅ b (– a) ⋅ (– b) = (2n – a) ⋅ (2n – b) = 22n – a ⋅ 2n – b ⋅ 2n + 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 2012/2013 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 bi und bi–1 des Multiplikators: (bibi–1)2 = 012 : Addition von a × 2i (bibi–1)2 = 102 : Subtraktion von a × 2i (bibi–1)2 = 002 oder (bibi–1)2 = 112 : keine Addition Ergänzung von b–1 = 0 erforderlich. [TI] Winter 2012/2013 Arithmetik 35 Multiplikation negativer Zahlen (3) Realisierung der Subtraktion von a × 2i durch Addition des Zweierkomplements (vorzeichenrichtig ergänzt). Beispiele (mit n = 5): Funktioniert für beliebige positive und negative Multiplikanden und Multiplikatoren! [TI] Winter 2012/2013 Arithmetik 36 DIVISION [TI] Winter 2012/2013 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: qi = 1, falls a – b > 0 qi = 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 2012/2013 Arithmetik 38 Division (2) Beispiel: 2910 / 510 = 510 mit Rest 410 [TI] Winter 2012/2013 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 = (q2n-1,...,q0) verwendet. Algorithmus zur Restoring-Division (für positive Zahlen a und b). (q2n-1,...,qn) = 0, (qn-1,...,q0) = a for i=0 to n-1 { shift left q by 1 (q2n-1,...,qn) = (q2n-1,...,qn) - b if (q2n-1 == 0) q0 = 1 else { q0 = 0 (q2n-1,...,qn)=(q2n-1,...,qn) + 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 2012/2013 Arithmetik 40 Dividierwerk Direkte Implementierung in digitaler Logik ergibt serielles Dividierwerk: Steuerwerk muss entsprechende Signale generieren: load q: add/sub: lade q mit Dividenden a in (qn–1,...,q0) addiere/subtrahiere b zu/von (q2n–1,...,qn) in Abhängigkeit von q2n-1 shift left: schiebe q um eine Stelle nach links Effizientere Dividierwerke arbeiten ohne Korrektur („NonRestoring“) und bestimmen je Schritt mehrere Quotientenbits. [TI] Winter 2012/2013 Arithmetik 41 FEST- UND GLEITKOMMAZAHLEN [TI] Winter 2012/2013 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 2012/2013 Arithmetik 43 Festkommazahlen (Wiederholung) Zahl zur Basis b mit einer festen Zahl von k Nachkommastellen: z = (zn– k–1 zn– k–2 ... z1 z0 , z–1 z–2 ... z–k+1 z–k )b = zn– k–1 ⋅ bn– k–1 + zn– k–2 ⋅ bn– k–2 + ... + b1 ⋅ z1 + b0 ⋅ z0 + b–1 ⋅ z–1 + b−2 ⋅ z−2 + ... + b−k +1 ⋅ z−k +1 + b−k ⋅ z−k = n − k −1 zi ⋅ b i ∑ i = −k Die Ziffern zn– k–1 zn– k–2 ... z1 z0 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 ⋅ 2k. Beispiel: Ein 8-Bit Register enthält die Binärzahl z´ = 01101110; für k = 3 gilt: z = 01101,1102 = 23 + 22 + 20 + 2–1 +2–2 = 13,7510. Alle bislang betrachteten Rechenwerke sind somit auch für Operationen auf Festkommazahlen geeignet! [TI] Winter 2012/2013 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 × re 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 × 109. − [TI] Winter 2012/2013 Arithmetik 45 Gleitkommazahlen (Wiederholung) Eine binäre Gleitkommazahl x ist definiert durch x = a × 2e 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 × 2e−b Wahl von b = 2 p–1 – 1 bewirkt Transformation des Bereiches für den Exponenten e von 0 ... 2 p – 1 in –(2p–1 –1) ... 2p–1. ⇒ einfache Kodierung positiver und negativer Exponenten! Früher unterschiedliches Gleitkommaformat in jedem Prozessor, heute überwiegend Verwendung des IEEE 754 Standard. [TI] Winter 2012/2013 Arithmetik 46 IEEE 754 Standard (1) Allgemeine Definition: x = (–1)s × 1.f × 2e–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 = 2p–1–1, gültiger Exponent e nur im Bereich emin= 0 < e < emax = 2p–1 = 2b+1 Darstellbarer Zahlenbereich: ± 21–b ... (2–2–m) × 2b Zwischen 2e–b und 2e−b+1 gibt es stets 2m Gleitkommazahlen: Abstand benachbarter Gleitkommazahlen ist abhängig von e. [TI] Winter 2012/2013 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 emin 0 0 0 emax 255 2047 32767 b 127 1023 16383 | xmin | 2–126 ≈ 10–38 2–1022 ≈ 10–308 2–16382 ≈ 10–4932 | xmax | (2–2–23)×2127 ≈ 1038 [TI] Winter 2012/2013 (2–2–52)×21023 ≈ 10308 (2–2–112)×216383 ≈ 104932 Arithmetik 48 IEEE 754 Standard (3) e = emin = (00..00)2 = 0 und e = emax = (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 = emax , f = 0, s = 0 x = −∞ („negative Infinity“): e = emax , f = 0, s = 1 x = NaN („Not a Number“): e = emax , f ≠ 0, s beliebig x = (–1)s × 0.f × 21−b („Denormalized Number“): e = 0, f ≠ 0 Denormalisierte Gleitkommazahlen ermöglichen die Darstellung sehr kleiner Werte im Bereich 21−b−m ... 21−b. [TI] Winter 2012/2013 Arithmetik 49 IEEE 754 Standard (4) Behandlung von Ausnahmesituationen: Überlauf tritt ein, wenn nach Normalisierung für x gilt: e ≥ emax 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 2012/2013 Arithmetik 50 Gleitkomma-Multiplikation Algorithmus zur Multiplikation zweier IEEEGleitkommazahlen x = (–1)s × a × 2α−bias und y = (–1)t × b × 2β–bias : 1) Multipliziere Mantissen als Festkommazahlen: c = a × b a = 1.fa und b = 1.fb 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.fc = 1.(c2m–1 c2m–2 ... cm)2 mit Rundung. 5) Behandlung von Ausnahmesituationen: a) Überlauf, falls γ ≥ emax = 2p – 1 ⇒ z := ±∞ (abhängig von u). b) Unterlauf, falls γ ≤ emin = 0 ⇒ Denormalisierung durchführen! c) Zero, falls c = 0 ⇒ z := ±0 (abhängig von u). [TI] Winter 2012/2013 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 2012/2013 Arithmetik 52 Gleitkomma-Addition (2) Möglicher Aufbau eines Gleitkomma-Addierwerks: [TI] Winter 2012/2013 Arithmetik 53 Literatur [Herold 2007] H. Herold, B. Lurz, J. Wohlrab, Grundlagen der Informatik, Pearson, 1. Auflage, 2007 [TI] Winter 2012/2013 Arithmetik 54