Das Verfahren in Hardware
8‐Bit Multiplikand
8‐Bit ALU
8‐Bit Produkt Control
Test
4‐Bit Multiplikator
Beispiel für 4‐Bit‐Zahlen Rechts‐Shift
Links‐Shift Demonstration mit
1001 * 0110 = 110110
1. Produkt = Produkt + Multiplikand, wenn Bit 0 des Multiplikators = 1
2.Links‐Shift
3.Rechts‐Shift
4. Anzahl Durch‐
läufe = 5Ende
Vorzeichenbehaftete Multiplikation
• Möglichkeit 2:
Tausche im Verfahren der vorigen Folie das Produkt‐
register mit einem vor‐
zeichenbehafteten Rechts‐
Shift‐Register aus.
‐ Betrachte Multiplikand x und Multiplikator y.
‐ Sei x‘ = x wenn x nicht‐negativ bzw. x‘ = ‐x sonst.
‐ Sei y‘ = y wenn y nicht‐negativ bzw. y‘ = ‐y sonst.
‐ Berechne z‘ = x‘ * y‘.
‐ Ergebnis z = z‘ wenn x und y nicht‐negativ oder x und y negativ, ansonsten ist z = ‐z‘.
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Weitere Beschleunigungen
Beobachtung:
1 0 1 1 (Y)
* 1 1 1 0 (X) ---
0 0 0 0 + 1 0 1 1 ---
= 1 0 1 1 + 1 0 1 1 ---
= 1 0 0 0 0 + 1 0 1 1
---
=1 0 0 1 1 0 1 0 (Z) 4‐Bit‐ALU
c s3 s2 s1 s0
Eine ALU für jede Summation
4‐Bit‐ALU
c s3 s2 s1 s0
4‐Bit‐ALU
c s3 s2 s1 s0
x0*y0 x0*y3y2y1
x1*y x2*y
x3*y
z7z6z5z4z3 z2 z1 z0
Weitere Beschleunigungen
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Jede ALU‐Operation verbrauche einen Taktzyklus. Wie viele Taktzyklen dauert die Multiplikation von 32‐Bit‐Zahlen?
Parallele Organisation der ALUs in einen Binärbaum (keine weiteren Details hier)
Division
Division nach der Schulmethode
Gegeben seien die Binärzahlen A und B. Was ist a : b? Beispiel:
Dividend Divisor Quotient 1 0 0 1 0 1 0 : 1 0 0 0 =
Rest:
Das Verfahren als Algorithmus
Beispiel 1001 : 10:
Dvdt :Dvsr= Qtnt 001001 : 10 = 00100 -000000 100000
--- 01001
-00000 10000 ---
1001
-1000 1000 ----
001
-000 100 ---
01
-00 10 --
1 Rest Start
Teste Rest
Shifte Divisor ein Bit nach Rechts Shifte Quotient nach
Links und setze dessen LSB=1.
6ter Durch‐
lauf?
Ende
<0
≥0
ja
nein Subtrahiere
Divisor vom Rest
Restauriere den alten Rest. Shifte Quotient
nach Links und setze dessen LSB=0.
Beispiel für 4‐Bit‐Zahlen
Das Verfahren in Hardware
8‐Bit Divisor
8‐Bit ALU
8‐Bit Rest Control
Test
4‐Bit Quotient
Beispiel für 4‐Bit‐Zahlen Links‐Shift
Rechts‐Shift Demonstration mit
1001 : 0010 = 100 Rest 1
1. Rest=Rest‐Divisor, wenn Divisor < Rest
2. Links‐Shift; LSB=Rest wurde verändert 3. Rechts‐Shift
4. Anzahl Durch‐
läufe = 6Ende
Vorzeichenbehaftete Division
• Umgang mit dem Quotienten (analog wie für Multiplikation):
‐ Betrachte Divisor x und Dividend y (also: Quotient z von y:x).
‐ Sei x‘ = x wenn x nicht‐negativ bzw. x‘ = ‐x sonst.
‐ Sei y‘ = y wenn y nicht‐negativ bzw. y‘ = ‐y sonst.
‐ Berechne Quotient z‘ von y‘ : x‘.
‐ Ergebnis z = z‘ wenn x und y nicht‐negativ oder x und y negativ, ansonsten ist z = ‐z‘.
• Und was ist das Vorzeichen des Rests? Beispiel:
•Also: Vorzeichen des Rests ist Vorzeichen des Dividend.
Dividend : Divisor Quotient Rest Quotient * Divisor + Rest = Dividend
7 : 2 3 1 3 * 2 + 1 = 7
-7 : 2 -3 -1 -3 * 2 – 1 = -7
7 : -2 -3 1 -3 * -2 + 1 = 7
-7 : -2 3 -1 3 * -2 – 1 = -7
Gleitkommazahlen
Reelle Gleitkommazahlen
Kleine Zahl Große Zahl Beispiel
Wissenschaftliche Darstellung
(eine Ziffer links des Kommas) Normalisierte Darstellung
(keine führende Null)
Binäre Gleitkommazahlen
Was ist der Dezimalwert der binären Gleitkommazahl 101,1001?
Was bedeutet 11,011 * 22?
Also: mit 2i multiplizieren verschiebt das Komma um i Stellen nach rechts.
Analog: mit 2‐i multiplizieren verschiebt das Komma um i Stellen nach links.
Binäre Gleitkommazahlen
Was ist die wissenschaftliche, normalisierte Darstellung der binären Gleitkommazahl zur dezimalen Gleitkommazahl 0,625?
Betrachte die recht harmlose Dezimalzahl 0,8.
Für die folgende unendliche Reihe rechnet man leicht nach:
(2‐1 + 2‐2) + (2‐5 + 2‐6) + (2‐9 + 2‐10) + (2‐13 + 2‐14) + ... = 4/5 = 0.8 Folglich ist die Binärdarstellung von 0.8 unendlich lang, nämlich:
0 , 1100 1100 1100 1100 1100 1100 1100 ...
Annahme wir speichern nur die ersten 32 Bits. Rechnet man in den Dezimalwert x zurück, dann ergibt sich:
x = (2‐1 + 2‐2) + (2‐5 + 2‐6) + (2‐9 + 2‐10) + ... + (2‐29 + 2‐30)
= 858.993.459 / 1.073.741.824 = 0,79999999981373548508 ≠ 0,8 Oha, 0,8 ist scheinbar doch nicht so harmlos. Es gibt folglich Zahlen mit endlicher dezimaler Gleitkommadarstellung, die binär nicht mit endlicher Anzahl Bits darstellbar sind.
Nebenbemerkung
N‐Bit Darstellung von Gleitkommazahlen
Normalisierte, wissenschaftliche Darstellung zur Basis 2. Beispiel:
Allgemein:
Sign‐and‐Magnitude‐Darstellung für beispielsweise 32 Bits:
Tradeoff:
Viele Fraction‐Bits: hohe Genauigkeit der Fraction
Viele Exponent‐Bits: großer darstellbarer Zahlenbereich
s exponent fraction
1 Bit 8 Bits 23 Bits
(s=0 für „+“ und s=1 für „‐“)
Beispiel
Was ist der Dezimalwert x des folgenden Bit‐Strings?
10000010110110000000000000000000
s exponent fraction
1 Bit 8 Bits 23 Bits
Wertebereiche, Overflow und Underflow
s exponent fraction
1 Bit 8 Bits 23 Bits
Kleinste darstellbare nicht‐negative Zahl annähernd 2,0 * 10‐38 Größte darstellbare Zahl annähernd 2,0 * 1038
Was, wenn die darzustellende Zahl außerhalb dieses Bereichs ist?
Overflow: Zahl zu groß
(Exponent ist zu groß um im Exponent‐Feld darstellbar zu sein)
Underflow: Zahl zu klein
(Negativer Exponent ist zu groß um im Exponent‐Feld darstellbar zu sein)
Beispiel:
Double‐Precision hat höhere Genauigkeit der Fraction und mit größerem Exponent auch einen größeren darstellbaren
Zahlenbereich.
Double‐Precision in diesem Beispiel:
Kleinste darstellbare nicht‐negative Zahl annähernd 2,0 * 10‐308 Größte darstellbare Zahl annähernd 2,0 * 10308
Double‐ und Single‐Precision
s exponent fraction
1 Bit 8 Bits 23 Bits
s exponent fraction
1 Bit 11 Bits 52 Bits
Insgesamt 32 Bits
Insgesamt 64 Bits Single‐
Precision
Double‐
Precision
Der Zahlenformatstandard IEEE 754
s exponent fraction
1 Bit 8 Bits 23 Bits
Insgesamt 32 Bits Single‐
Precision
s exponent fraction
1 Bit 11 Bits 52 Bits
Insgesamt 64 Bits Double‐
Precision
Bit‐Aufteilungen in dieser Form sind in IEEE 754 spezifiziert.
Betrachte die wissenschaftliche, normalisierte Darstellung:
[+ oder ‐] 1,xxxxxxxx * 2yyyy
Beobachtung: die „1“ vor dem Komma ist redundant.
Somit: Bei IEEE 754 wird die „1“ implizit angenommen und in
„fraction“ nicht codiert. „fraction“ speichert nur Nachkommastellen.
Beispiel
Es sei die „1“ vor dem Komma implizit angenommen. „Fraction“
speichere damit nur die Nachkommastellen. Was ist der Dezimalwert x des folgenden Bit‐Strings?
1000001010110000000000000000000
s exponent fraction
1 Bit 8 Bits 23 Bits
Weitere Eigenschaften von IEEE 754
Unterscheidung von „Fraction“ und „1+Fraction“ in der Darstellung (‐1)S * (1 + Fraction) * 2Exponent
1+Fraction wird als Significant (deutsch: Mantisse) bezeichnet.
Motivation für eine geeignete Exponent‐Darstellung
Annahme: Exponent wäre mit Zweierkomplement dargestellt. Wie macht man einen Größer‐Kleiner‐Vergleich der folgenden beiden Zahlen?
Zahl 1: 000000111101000100000000000000000 Zahl 2: 011010111010010000010000000000000
1. Vergleiche erst mal die Vorzeichenbits. Bei unterschiedlichen Vorzeichenbits ist der Vergleich beendet.
2. Vergleiche die Exponenten. Ist einer größer als der andere, ist der Vergleich beendet. (Signed‐Vergleich)
3. Vergleiche die Fractions. (Unsigned‐Vergleich) Kann man Schritt 2 und 3 in einem durchführen?
Kleinster Exponent müsste 00000000 und größter Exponent müsste 11111111 sein, dann könnte man Exponent und Fraction für einen Vergleich einfach
konkatenieren.
Darstellung des Exponenten in Biased‐Notation
Erinnerung: Biased‐Notation (hier mit 8‐Bit und Bias 127):
0000 0000 = -127 (0-Bias = -127) 0000 0001 = -126 (1-Bias = -126)
...
0111 1110 = -1 (126-Bias = -1) 0111 1111 = 0 (127-Bias = 0) 1000 0000 = 1 (128-Bias = 1)
...
1111 1110 = 127 (254-Bias = 127) 1111 1111 = 128 (255-Bias = 128)
Zusammengefasst: Der Wert x einer Zahl in IEEE 754 Darstellung ist
(Single‐Precision (8‐Bit‐Exponent) Bias=127, Double‐Precision (11‐Bit‐Exponent) Bias=1023)
IEEE 754 Encoding
Wie stellt man im IEEE 754 Format eigentlich die „0“ dar!?
(‐1)
S* (1 + Fraction) * 2
(Exponent—Bias)Single‐Precision (Bias=127)
Double‐Precision
(Bias=1023) Dargestelltes Objekt
Exponent Fraction Exponent Fraction
0 0 0 0 0
0 Nicht‐Null 0 Nicht‐Null (+/‐ Denormalised Number) 1 bis 254 Beliebig 1 bis 2046 Beliebig +/‐ Gleitkommazahl
255 0 2047 0 +/‐ Unendlich
255 Nicht‐Null 2047 Nicht‐Null NaN (Not a Number)
Quiz
Betrachte IEEE 754 Single‐Precision, also Bias = 127. Was ist der Dezimalwert der folgenden Binärzahl?