a / b - CCS Labs

Werbung
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
Herunterladen