Informationsverarbeitung
2n −1
+
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
𝑣=𝑐=1
𝑆 !"# = 𝐴! + 𝐵 !
!'# !'#
0000 + 𝑐 ⋅ 2! + 𝑆 ! = ) 𝑎$ ⋅ 2$ + ) 𝑏$ ⋅ 2$
1111 0001
$%& $%&
1110 0010
15 0 1
!'#
14 2
1101 0011 𝑐𝑠!'# … 𝑠& = ) 𝑎$ + 𝑏$ ⋅ 2$
13 3
$%&
1100 12 4 0100
11 5 Beispiel:
1011 10 6 0101
𝑆 = 1111( + 0001(
9 7
1010
8
0110 = 1 0000( (carry out)
1001 0111
1000
𝐷 = 0000( − 0001(
𝑐 … carry bit 𝑣 … overflow flag = 1 1111( (borrow in)
−2n− 1 2n− 1 −1
- +
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7
𝑐=1
𝑆 !"# = 𝐴! + 𝐵 !
0000 + = 𝑎!'# ⋅ 2!'# + 𝐴!'# +
1111 0001
1110
0
0010 𝑏!'# ⋅ 2!'# + 𝐵 !'#
-1 1
-2 2 0011
1101 !'(
-3 3
= 𝑎!'# + 𝑏!'# ⋅ 2!'# + ) (𝑎$ + 𝑏$ ) ⋅ 2$
1100 -4 4 0100
$%&
-5 5
= 𝑐 ⋅ 2! + 𝑠!'# ⋅ 2!'# + 𝑘 ⋅ 2
!'#
+ 𝑆 !'#
1011 -6 6 0101
-7 7 = 𝑐 ⋅ 2! + 𝑠!'# + 𝑘 ⋅ 2!'# + 𝑆 !'#
-8
1010 0110
1001 0111 1 for 𝑘 ≠ 𝑐
1000 𝑣=6
0 otherwise
𝑣=1
−2n− 1 2n− 1 −1
- +
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7
𝑐=1
0000 +
1111 0001
1110
0
0010 Beispiel:
-1 1
-2 2
1101 0011 𝑆 =7+1
-3 3 = 0111( + 0001(
1100 -4 4 0100 = 0& 1# 0# 0# 0(
𝑘=𝑐=1 -5 5 𝑘=𝑐=0
1011 -6 6 0101 𝐷 = −8 − 1
-7 7
1010
-8
0110 = 1000( − 0001(
1001 0111 = 1000( + 1111(
1000
= 1# 0& 1& 1& 1(
𝑣=1= 𝑘≠𝑐
q Die Subtraktion von 𝐴! von 1 … 1 ! ist mindestens 0 und daher immer gültig!
1 … 1 ! − 𝐴! ≥ 0 … 0 !
Festkommazahlen
Fixed-point numbers
Idee:
1.2 + 1.3 = 2.5 = 25 ⋅ 10CD = 12 ⋅ 10CD + 13 ⋅ 10CD
Vorteile:
❏ Geringe Komplexität, geringer Hardwareaufwand
Anwendungen:
❏ Finanzmathematik
❏ Realtime-Anwendungen
𝑍 = 3 𝑧H ⋅ 𝑏 H = 3 𝑧HCG ⋅ 𝑏 HCG = 𝑏.
CG
⋅ 3 𝑧HCG ⋅ 𝑏 H
HICG HIK HIK
E
M
❏ Darstellung negativer Zahlen wie bei Ganzzahlen
❏ Skalierungsfaktor üblicherweise fest gewählt für alle Zahlen
Beispiel:
0011 ⋅ 2CN + 0011 ⋅ 2CD = 0011 + 0110 ⋅ 2CN = 1001 ⋅ 2CN
../0 1.0 2.20
Beispiel:
0011 ⋅ 2CN ⋅ 0011 ⋅ 2CD = 0011 ⋅ 0011 ⋅ 2CN ⋅ 2CD = 1001 ⋅ 2CS
K.QR D.R D.DNR
Gleitkommazahlen
Floating-point numbers
❏ 9𝑒 + 5 = 900′000
q normalisierte Form:
𝑀 = −1 ' ⋅ 1. 𝑓
Führende 1 wird nicht gespeichert und muss für Berechnungen ergänzt, d.h.
entpackt, werden. (Ausnahme: double-extended Format)
❏ denormalisierte Form:
𝑀 = −1 ' ⋅ 0. 𝑓
Wertebereich:
❏ normalisiert: 1.0 ≤ 𝑀 < 2.0
❏ denormalisiert: 0.0 ≤ 𝑀 < 1.0
𝐸 = 𝑐 − 𝐵( bzw. 𝑐 = 𝐸 + 𝐵&
Interpretation s c f Zahlendarstellung
1. denormalisiert s 0 ≠0 −1 , ⋅ 0. 𝑓 ⋅ 2 #'-!
Null s 0 0 −1 ,
⋅0
2. normalisiert s 0 < 𝑐 < 2+! − 1 ≥0 −1 , ⋅ 1. 𝑓 ⋅ 2 .'-!
3. Unendlich s 2+! − 1 0 −1 ,
⋅∞
4. Not a Number 0 2+! − 1 ≠ 0 𝑁𝑎𝑁
s c f Z Interpretation
1. 0 00000000 00 . . . 00 +0 pos. Null
1 00000000 00 . . . 00 −0 neg. Null
0 00000000 00 . . . 01 +0,00...01 ·2−126 denormalisiert
1 00000000 00 . . . 01 −0,00...01 ·2−126 denormalisiert
2. 0 00000001 00 . . . 00 +1,00...00 ·2−126 normalisiert
1 00000001 00 . . . 00 −1,00...00 ·2−126 normalisiert
0 11111110 11 . . . 11 +1,11...11 ·2+127 normalisiert
1 11111110 11 . . . 11 −1,11...11 ·2+127 normalisiert
3. 0 11111111 00 . . . 00 +∞ pos. unendlich
1 11111111 00 . . . 00 −∞ neg. unendlich
4. 0 11111111 00 . . . 01 NaN Not-a-Number
Quelle: Wikipedia
Rechnerarchitektur I © Akash Kumar
Addition und Substraktion von
Gleitkommadarstellung (1)
23
Normalisierte Darstellung:
𝑍# = 𝑀# ⋅ 2&# = ±𝑆# ⋅ 2&# = −1 '# ⋅ 1. 𝑓# ⋅ 2 (#%)"
𝑍* = 𝑀* ⋅ 2&$ = ±𝑆* ⋅ 2&$ = −1 '$ ⋅ 1. 𝑓 ⋅ 2 ($ %)"
*
𝐸* ≤ 𝐸#
𝑍# + 𝑍* = 𝑀# + 𝑀* ⋅ 2% &#%&$ ⋅ 2&#
= −1 '# ⋅ 1. 𝑓# + −1 '$ ⋅ 1. 𝑓* ⋅ 2% (#%($ ⋅2 (# %)"
Bei ungleichen Exponenten 𝐸#, 𝐸' muß die Zahl mit dem kleineren Exponenten
denormalisiert werden (Erhöhung des Exponenten bei gleichzeitiger
Rechtsverschiebung des Signifikanten).
Beachte: Die Mantissen 𝑀#und 𝑀' werden zur Berechnung im 2-C dargestellt!
Rechnerarchitektur I © Akash Kumar
Addition und Substraktion von
Gleitkommadarstellung (2)
24
Z s c S Bemerkung Dez.
Z1 0 1000 0001 0 1.0000 ... normalisiert 4.0
Z2 0 0111 1111 0 1.1000 ... normalisiert 1.5
Z2 0 1000 0001 0 0.0110 ... denormalisiert 1.5
Z1 + Z2 0 1000 0001 0 1.0110 ... normalisiert 5.5
Normalisierte Darstellung:
𝑍# = 𝑀# ⋅ 2&# = −1 '# ⋅ 1. 𝑓# ⋅ 2 (# %)"
𝑍# ⋅ 𝑍* = 𝑀# ⋅ 𝑀* ⋅ 2 &# "&$
𝑍# 𝑀# &# %&$
= ⋅2
𝑍* 𝑀*
'# %'$
1. 𝑓# (# %($ ")" %)"
= −1 ⋅ ⋅2
1. 𝑓*
.
Algorithmus für 𝑍- = 𝑍# ⋅ 𝑍* bzw. .#:
$
Z s c S Bemerkung Dez.
Z1 0 1000 0001 1.0000 ... normalisiert 4.0
Z2 0 0111 1111 1.1000 ... normalisiert 1.5
Z1 ·Z2 0 1000 0001 1.1000 ... normalisiert 6.0
Z2
Z1
0 0111 1101 1.0000 ... normalisiert 0.375
Verschiedene Rundungsmodi:
❏ zum nächsten Wert, bei 0,5 auf den geraden Wert (round-to-even, LSB 0)
❏ nach 0
❏ nach +∞ oder −∞,
Relevante Bitstellen für die Rundung (auf q Stellen, vom MSB gezählt):
❏ guard Bit g - Bitstelle auf die gerundet wird (q. Stelle vom MSB),
❏ round Bit r - Rundungsbit (q+1. Stelle vom MSB),
❏ sticky Bit s - Zusatzstelle (q+2. Stelle vom MSB bis zum LSB)
Anhang
Appendix