Kapitel 6 Darstellung von Daten im Rechner

Transcription

Kapitel 6 Darstellung von Daten im Rechner
Kapitel 6
Darstellung von Daten im Rechner
Kapitel 6: Darstellung von Daten im Rechner
Seite 1 / 63
Darstellung von Daten im Rechner
Inhaltsverzeichnis
6.1 Darstellung ganzer Zahlen
6.2 Darstellung reeller Zahlen
6.3 Rechnerarithmetik
6.4 Darstellung alphanumerischer Daten
Kapitel 6: Darstellung von Daten im Rechner
Seite 2 / 63
Darstellung ganzer Zahlen
Die Wortlänge eines Rechners stellt eine obere Grenze für die Größe von
Zahlen dar, die der Rechner verarbeiten kann.
Mit 8 Bits lassen sich z.B. natürliche Zahlen zwischen 0 und 28-1 = 255
darstellen.
Probleme:
ƒ
ƒ
ƒ
Diese Bereiche können überschritten werden, etwa durch Addition (132+133).
Eine Lösung wäre das Setzen eines Flags, dass der Bereich überschritten wurde.
Was passiert bei der Subtraktion, etwa bei (132-133)?
Wie werden negative Zahlen dargestellt?
Kapitel 6: Darstellung von Daten im Rechner
Seite 3 / 63
Vorzeichen/Betrags-Darstellung
Eine Möglichkeit der Darstellung negativer Zahlen ist die so genannte
Vorzeichen/Betrags-Darstellung:
ƒ
Man verwendet das erste Bit zur Darstellung des Vorzeichens:
• 0 für eine positive,
• 1 für eine negative Zahl.
ƒ
Mit den verbleibenden Bits wird der Betrag der Zahl dargestellt.
Beispiel 6.1:
Die Zahl -19 wird mit 8 Bits also dargestellt als:
1 0010011
ƒ
19
Mit n Bits werden also nicht mehr die Zahlen von 0 bis 2n-1 dargestellt, sondern im
Bereich von -2n-1+1 bis 2n-1-1.
Kapitel 6: Darstellung von Daten im Rechner
Seite 4 / 63
Nachteile der Vorzeichen/Betrag-Darstellung
Diese Art der Darstellung ist zwar intuitiv, besitzt aber einige Nachteile:
ƒ
ƒ
ƒ
ƒ
Es gibt zwei verschiedene Nullen: +0 (00...00) und -0 (10...00).
Ein Rechner, der Zahlen bitweise vergleicht, wird diese nicht als gleich ansehen.
Das Rechnen mit dieser Zahlendarstellung ist schwierig, da sie sowohl ein Addierals auch ein Subtrahierwerk benötigt.
Zusätzlich muss es eine Logik geben, die entscheidet, ob addiert oder subtrahiert
werden muss.
Es müssen vier Fälle unterschieden werden:
Fall
Operanden
Auszuführende Operation
1
+x
+y
x+y
Addition
2
-x
-y
-(x+y)
Addition
3
+x
-y
mit |x| • |y|
x-y
Subtraktion
-x
+y
mit |y| • |x|
y-x
Subtraktion
+x
-y
mit |x| < |y|
-(y-x)
Subtraktion
-x
+y
mit |y| < |x|
-(x-y)
Subtraktion
4
Kapitel 6: Darstellung von Daten im Rechner
Seite 5 / 63
Komplementdarstellung ganzer Zahlen
Führt man die Subtraktion auf die Addition zurück, braucht man kein
Subtrahierwerk, sondern kann mit einem reinen Addierwerk auskommen.
Dazu müssen die negativen Zahlen allerdings anders dargestellt werden, etwa
durch die Komplement-Darstellung:
Definition 6.1:
Sei x = (xn-1,…, x0)2 ∈ Bn eine n-stellige Dualzahl.
K1(x) := (1 ⊕ xn-1,…, 1 ⊕ x0)2
heißt Einer-Komplement von x.
K2(x) := (1 ⊕ xn-1,…, 1 ⊕ x0)2 +1 = K1(x) + 1 (modulo 2n)
heißt Zweier-Komplement von x.
Das Einer-Komplement einer Zahl x erhält man also durch bitweises Invertieren
von x, das Zweier-Komplement durch zusätzliche Addition von 1 (modulo 2n).
Kapitel 6: Darstellung von Daten im Rechner
Seite 6 / 63
Komplementdarstellung - Beispiel
Beispiel 6.2:
Sei x = (10011110)2. Dann gilt:
K1(x)
=
01100001
K2(x)
=
01100010
Wesentlich bei der Komplement-Darstellung ist, dass sie stets auf eine
vorgegebene Stellenzahl bezogen wird.
Kapitel 6: Darstellung von Daten im Rechner
Seite 7 / 63
Komplementdarstellung negativer Zahlen
Kann ein Rechner n Bits in einem Register oder einer Speicherzelle ablegen, so
sind N=2n verschiedene Bitmuster darstellbar.
Da eine Komplementdarstellung speziell zur Darstellung negativer Zahlen
verwendet wird, kann man generell von der folgenden Idee ausgehen:
ƒ
ƒ
Eine positive Zahl x wird dargestellt durch
Eine negative Zahl -x wird dargestellt durch
+x = x
-x = N-1-x (in K1), -x = N-x (in K2).
Beispiel 6.3:
Sie n=4. Dann gilt: N = 24 = 16.
Dann stimmt die Darstellung von -5 im Zweier-Komplement nach obiger
Vereinbarung mit der von 16-5 = 11 überein:
(5)10 = (0101)2
K2(5) = K1(5)+1 = (1010)2+1 = (1011)2 = (11)10
Kapitel 6: Darstellung von Daten im Rechner
Seite 8 / 63
Komplementdarstellungen
Einer-Komplement:
Umfasst den Wertebereich von
-2n-1+1 bis 2n-1-1.
Nachteil: es gibt zwei Darstellungen der
Null.
Kapitel 6: Darstellung von Daten im Rechner
Zweier-Komplement:
Umfasst den Wertebereich von
-2n-1 bis 2n-1-1.
Vorteil: es gibt nur eine Darstellung der
Null.
Seite 9 / 63
Mehrdeutigkeit der Komplementdarstellungen
Der Nachteil beider Komplementdarstellungen ist die Mehrdeutigkeit:
(111)2 in K2 kann (-1)10 bedeuten, aber auch (+7)10.
Lösung:
Wie bei der Vorzeichen/Betrag-Darstellung gibt die erste Ziffer an, ob es sich
um eine positive oder eine negative Zahl handelt.
ƒ
ƒ
Positiv: führende Null
Negativ: führende Eins
(111)2 wird dann also als (-1)10 interpretiert, (0111)2 als (+7)10.
D.h. es ist zu beachten, dass in einem Rechner stets eine bestimmte Wortlänge
fest liegt, auf die sich das Komplement bezieht.
Kapitel 6: Darstellung von Daten im Rechner
Seite 10 / 63
Rechnen mit dem Einer-Komplement
Beispiel 6.4: (Subtraktion im Einer-Komplement)
Zur Subtraktion a-b addiert man das Komplement von b zu a (a+K1(b)).
a=(00110100)2=(52)10, b=(01000110)2 =(70)10 bei n=8 Bits.
Addition
a
b
a+b
+
Subtraktion
0
0
1
1
0
1
0
0
a
0
1
0
0
0
1
1
0
K1(b)
0
1
1
1
1
0
1
0
a-b
a+b=(122)10
Kapitel 6: Darstellung von Daten im Rechner
+
0
0
1
1
0
1
0
0
1
0
1
1
1
0
0
1
1
1
1
0
1
1
0
1
a-b = (237)10 = (256 - 1 - 237)10 = (-18)10
Seite 11 / 63
Rechnen mit dem Einer-Komplement
Beispiel 6.4: (Subtraktion im Einer-Komplement)
Tritt bei der Subtraktion ein Übertrag auf, wird dieser zum Ergebnis addiert:
a = (00110100) = (52)10 , b = (00011001) = (25)10.
a
0
0
1
1
0
1
0
0
K1(b)
+
1
1
1
0
0
1
1
0
a-b
1
0
0
0
1
1
0
1
0
Addition des Übertrags zur niedrigsten Stelle des Ergebnisses:
0
0
0
1
1
0
1
+
a-b
0
1
0
0
0
1
1
0
1
1
a-b=(27)10
Kapitel 6: Darstellung von Daten im Rechner
Seite 12 / 63
Rechnen mit dem Zweier-Komplement
Beispiel 6.5: (Subtraktion im Zweier-Komplement)
Zur Subtraktion a-b addiert man das Komplement von b zu a (a+K2(b)).
a=(00110100)2=(52)10, b=(01000110)2 =(70)10 bei n=8 Bits.
Addition
a
b
a+b
+
Subtraktion
0
0
1
1
0
1
0
0
a
0
1
0
0
0
1
1
0
K2(b)
0
1
1
1
1
0
1
0
a-b
a+b=(122)10
Kapitel 6: Darstellung von Daten im Rechner
+
0
0
1
1
0
1
0
0
1
0
1
1
1
0
1
0
1
1
1
0
1
1
1
0
a-b = (238)10 = (256 - 238)10 = (-18)10
Seite 13 / 63
Rechnen mit dem Zweier-Komplement
Beispiel 6.5: (Subtraktion im Zweier-Komplement)
Tritt bei der Subtraktion ein Übertrag auf, wird dieser ignoriert:
a = (00110100) = (52)10 , b = (00011001) = (25)10.
a
0
0
1
1
0
1
0
0
K2(b)
+
1
1
1
0
0
1
1
1
a-b
1
0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
Ignorieren des Übertrags liefert:
a-b
=
a-b=(27)10
Kapitel 6: Darstellung von Daten im Rechner
Seite 14 / 63
Rechnen mit den Komplementen
Bei Auftreten eines Übertrags bei einer Subtraktion wird dieser bei K1 zu der
letzten Stelle hinzuaddiert, bei K2 ignoriert.
Der Übertrag bedeutet, dass der Zahlenkreis (vgl. S. 9) einmal umrundet wurde.
ƒ
ƒ
Bei K1 bedeutet dies, dass die Null doppelt subtrahiert wurde, eine davon muss
rückgängig gemacht werden, daher die Addition des Übertrags.
Bei K2 hat dies keine Konsequenzen, da es nur eine Null gibt. Das Ignorieren des
Übertrages entspricht der Subtraktion von N.
Kapitel 6: Darstellung von Daten im Rechner
Seite 15 / 63
Subtraktion mit einem Addierwerk
Durch die Komplement-Darstellungen ist die Verwendung eines
Subtrahierwerkes unnötig.
Durch das bitweise Invertieren (und eventueller Addition von 1) kann ein
normales Addierwerk diese Aufgabe übernehmen.
Ist das Ergebnis des Addierwerkes negativ, dann wird es wie folgt decodiert:
ƒ
ƒ
Beim Einer-Komplement
ist die Zahl einfach erneut zu komplementieren.
Beim Zweier-Komplement
ist die Zahl zu komplementieren und eine Eins zu addieren.
Ist das Ergebnis des Addierwerkes positiv, ist keine Umwandlung notwendig.
Kapitel 6: Darstellung von Daten im Rechner
Seite 16 / 63
Decodierung der Komplementdarstellungen
Beispiel 6.7:
Decodierung von Ergebnissen:
Einer-Komplement:
Zweierkomplement:
(1111 1011)2 ist eine negative Zahl.
Sie wird komplementiert zu (0000 0100)2.
(1111 1011)2 stellt also im EinerKomplement die Zahl (-4)10 dar.
(1110 1011)2 ist eine negative Zahl.
Sie wird komplementiert zu (0001 0100)2.
Addition von 1 führt zu (0001 0101)2.
(1110 1011)2 stellt also im ZweierKomplement die Zahl (-21)10 dar.
(0010 0101)2 ist eine positive Zahl.
Sie muss nicht umgewandelt werden und
stellt offensichtlich (+37)10 dar.
(0110 0001)2 ist eine positive Zahl und
muss nicht umgewandelt werden. Sie
stellt offensichtlich (+97)10 dar.
Kapitel 6: Darstellung von Daten im Rechner
Seite 17 / 63
Vergleich der Darstellungen
Alternative Darstellungen ganzer Zahlen:
Kapitel 6: Darstellung von Daten im Rechner
Seite 18 / 63
Overflow
Bei einer Addition kann ein Overflow auftreten:
Entsteht bei der Addition zweier positiver Zahlen ein (scheinbar) negatives
Ergebnis bzw. bei der Subtraktion ein (scheinbar) positives, so liegt eine
Bereichsüberschreitung vor.
Beispiel 6.8:
Mit n=4 Bits sind im Zweier-Komplement die Zahlen von -8 bis +7 darstellbar.
Addiert man nun die Zahlen 5 und 4, so erhält man folgendes Resultat:
0 1 0 1
+ 0 1 0 0
1 0 0 1
Das Ergebnis lautet -7 und nicht +9, da +9 nicht darstellbar ist.
Abhilfe schafft ein Overflow-Flag, das angibt, ob ein Overflow aufgetreten ist.
Kapitel 6: Darstellung von Daten im Rechner
Seite 19 / 63
Binary Coded Decimal (BCD)
Eine vierte Möglichkeit, Dezimalzahlen darzustellen, ist der BCD-Code:
ƒ
ƒ
ƒ
Die Dezimalziffern 0 bis 9 werden wie gewohnt durch eine Bitfolge codiert.
Die Bitfolge hat die konstante Länge 4.
Es bleiben sechs Bitmuster ungenutzt, zwei davon werden zur Kennzeichnung
positiver (1010) und negativer (1011) Zahlen verwendet.
Beispiel 6.9:
Die BCD-Darstellung der Zahl 4397 lautet (ohne Vorzeichen):
0100 0011 1001 0111.
Entsprechend lauten die Darstellungen von +4397 und -4397:
1010 0100 0011 1001 0111 (+4397),
1011 0100 0011 1001 0111 (-4397).
Die BCD-Codierung ist mittlerweile veraltet.
Kapitel 6: Darstellung von Daten im Rechner
Seite 20 / 63
Binary Coded Decimal (BCD)
Auch wenn die BCD-Darstellung einer Zahl leicht herzustellen und abzulesen
ist, so ist das Rechnen mit dieser Darstellung kompliziert:
Beispiel 6.10: Rechnen mit der BCD-Codierung
Wir berechnen 9 + 1:
Addition von 6:
9
0 0 0 0
1 0 0 1
0 0 0 0
1 0 1 0
+ 1
+ 0 0 0 0
0 0 0 1
+ 0 0 0 0
0 1 1 0
1 0
0 0 0 0
1 0 1 0
0 0 0 1
0 0 0 0
1
0
1010 ist keine Zahl, sondern das Zeichen
für +.
Da sechs Bitmuster nicht genutzt
Jetzt haben wir das richtige Ergebnis.
werden, muss eine 6 addiert werden:
Bereits die Addition von zwei BCD-Zahlen kann eine Dezimalanpassung
erfordern.
Kapitel 6: Darstellung von Daten im Rechner
Seite 21 / 63
Darstellung von reellen Zahlen
Bei den bisherigen Zahlendarstellungen sind wir immer von ganzen Zahlen
ausgegangen.
Mit jedem Rechner lassen sich darüber hinaus auch nicht-ganzzahlige Dualbzw. Dezimalbrüche verarbeiten.
Das geschieht durch Verwendung spezieller Darstellungen:
ƒ
ƒ
Die Festkommadarstellung
belässt das Komma für alle Zahlen an einer fest vorgegebenen Stelle,
die Gleitkommadarstellung
verschiebt das Komma so, dass signifikante Stellen erhalten bleiben. Das Komma
befindet sich nicht bei allen Zahlen an der gleichen Stelle.
Kapitel 6: Darstellung von Daten im Rechner
Seite 22 / 63
Festkommadarstellung
Wird eine Zahl durch eine n-stellige Dual- (bzw. Dezimal-) Zahl (eventuell
komplementiert) dargestellt, wobei das Komma an beliebiger, aber fester Stelle
angenommen wird, so spricht man von einer Festkomma-Darstellung.
Beispiel 6.11:
(a) Das Komma wird rechts von der Stelle mit dem niedrigsten Wert
angenommen.
n−1
Ein n-bit-Wort (xn-1,… , x0 )2 stellt dann die Zahl z =
i
x
⋅
2
∑ i dar.
i =0
(b) Das Komma wird links von der Stelle mit dem höchsten Wert
angenommen.
n−1
Ein n-bit-Wort (xn-1,… , x0 )2 stellt dann die Zahl z =
Ist z.B. n=4, so ist 1001 die Darstellung von
i −n
x
⋅
2
∑ i dar.
i =0
1⋅ 2-1 + 0 ⋅ 2-2 + 0 ⋅ 2-3 +1 ⋅ 2-4 = 0,5625.
Kapitel 6: Darstellung von Daten im Rechner
Seite 23 / 63
Festkommadarstellung
Im Allgemeinen stellt die Bitfolge (xn-1,…, x1, x0, x-1,…, x-m+1,x-m)2, die Zahl
x=
n −1
∑
i =− m
xi <2i
dar. Dabei wird das Komma rechts von der Stelle x0 angenommen.
Zur Darstellung negativer Zahlen wird ein Bit für das Vorzeichen reserviert oder
eine der Komplementdarstellungen verwendet.
Kapitel 6: Darstellung von Daten im Rechner
Seite 24 / 63
Umrechnung dual-dezimal
Ein Dualbruch kann leicht in einen Dezimalbruch umgerechnet werden.
Umgekehrt ist auch ein Dezimalbruch einfach in einen Dualbruch zu
überführen:
ƒ
ƒ
ƒ
ƒ
Das Verfahren verläuft komplementär zu dem bereits bekannten Verfahren zur
Umwandlung von Dezimal- in Dualzahlen.
Multipliziere die Zahl mit der Basis. Die vor dem Komma stehenden Ergebnisse
werden in der Reihenfolge des Entstehens gelesen.
Tritt vor dem Komma eine 1 auf, wird diese für die nachfolgenden Multiplikationen
ignoriert.
Treten hinter dem Komma nur noch Nullen auf, ist die Berechnung beendet.
Beispiel 6.12: Umrechnung eines Dezimalbruches
Zur Darstellung des Dezimalbruches 0,625 gehen wir wie folgt vor:
0,625 · 2 = 1,25
0,25 · 2 = 0,5
0,5 · 2 = 1,0
Also folgt: (0,625)10 = (0,101)2
Kapitel 6: Darstellung von Daten im Rechner
Seite 25 / 63
Rechnen mit Festkomma-Zahlen
Um Operationen mit Festkomma-Zahlen durchführen zu können, muss das
Komma immer an der gleichen Stelle angenommen werden.
Eventuell sind dazu Transformationen der Operatoren notwendig.
Beispiel 6.13: Transformation von Operatoren
Bei einer Wortlänge von 8 Bit und 6 Stellen vor und 2 Stellen hinter dem
Komma muss (0,01010011100)2 dargestellt werden als (000000,01)2.
Durch die Transformation von Operatoren können signifikante Stellen verloren
gehen!
Dieser Nachteil wird durch die Gleitkomma-Darstellung vermieden.
Kapitel 6: Darstellung von Daten im Rechner
Seite 26 / 63
Gleitkommadarstellung
Bei der Gleitkommadarstellung (halblogarithmische Darstellung) wird jede
Zahl in der Form
z = ± m × b±d
dargestellt.
ƒ
ƒ
ƒ
m heißt Mantisse,
d Exponent und
b ist die Basis für den Exponenten
(b stimmt nicht notwendigerweise mit der Basis des zugrunde liegenden
Zahlensystems überein.)
Beispiel 6.14: Gleitkommadarstellung - Basis 8
Die Dezimalzahl 1587,2 ist wie folgt darstellbar:
1587,2 = 3,1 ⋅ 8 3.
Mantisse Basis des Exponenten Exponent
Es gilt also b=8, die Basis des verwendeten Zahlensystems ist 10.
Kapitel 6: Darstellung von Daten im Rechner
Seite 27 / 63
Gleitkommadarstellung
Im Folgenden sei b=2.
Die Basis ist für alle auftretenden Exponenten gleich und muss nicht
gespeichert werden. Deshalb ist jede Gleitkommazahl darstellbar durch
(±m , ±d).
Die Gleitkommadarstellung einer gegebenen Zahl ist nicht eindeutig!
Beispiel 6.15:
Die Dezimalzahl 1587,2 hat verschiedene Darstellungen, z.B.:
1587,2 = 158720 ⋅ 10-2
= 1,5872 ⋅ 103
= 0,015872 ⋅ 105
= 15,872 ⋅ 102
= 15872000 ⋅ 10-4
Kapitel 6: Darstellung von Daten im Rechner
Seite 28 / 63
Rechnen mit der Gleitkommadarstellung
Da diese Darstellung nicht eindeutig ist, erfordert eine Gleitkomma-Operation
eventuell gewisse Vorbereitungen:
Beispiel 6.16: Vorbereitung einer Gleitkomma-Operation
Um die Zahlen 15,872 ⋅ 102 und 0,0007842 ⋅ 107 zu addieren, wird zunächst
der zweite Operand durch 78,42 ⋅ 102 ersetzt, um dann
(15,872 + 78,42) ⋅ 102
rechnen zu können.
Kapitel 6: Darstellung von Daten im Rechner
Seite 29 / 63
Normalisierte Gleitkommadarstellung
Um Probleme im Zusammenhang mit der Nicht-Eindeutigkeit einer
Gleitkommadarstellung zu vermeiden, wird in Rechnern eine normalisierte
Darstellung verwendet:
Definition 6.2: normalisierte Darstellung
Eine Gleitkommazahl der Form ± m × b±d heißt normalisiert, falls gilt:
1
≤ m <1
b
Im Fall b=2 (als Basis für Mantisse und Exponent) folgt, dass für die Mantisse
einer normalisierten Gleitkommazahl gilt:
1
≤ m <1
2
Also wird das Komma links von der höchstwertigsten Stelle (das am weitesten
links stehende Bit) der Mantisse angenommen. Dieses Bit ist 0.
Hinweis: Diese Festlegung ist nicht in allen Darstellungen gleich. Im unten
beschriebenen IEEE 754 Format gilt etwa 1 ≤ m < 2 .
Kapitel 6: Darstellung von Daten im Rechner
Seite 30 / 63
Normalisierte Gleitkommadarstellung
Beispiel 6.17: Normalisierung von Dualzahlen
(a) Die normalisierte Darstellung von 0,000100111 (dual) lautet:
0,100111 ⋅ 2-3.
(b) Die normalisierte Darstellung von 101100,001 ⋅ 22 (dual) lautet:
0,101100001 ⋅ 28.
Beispiel 6.18: Normalisierung von Dualzahlen mit b=8
Gesucht ist die normalisierte Darstellung von (0,000011)2 ⋅ 82.
1
Für die Mantisse m gilt dann: ≤ m < 1
8
Die binäre Mantisse 0,000011 kann oktal geschrieben werden als 0,03, d.h.
die normalisierte Darstellung lautet:
(0,000011)2 ⋅ 82 = (0,03)8 ⋅ 82
= (0,3)8 ⋅ 81
= (0,011)2 ⋅ 81
Kapitel 6: Darstellung von Daten im Rechner
Seite 31 / 63
Normalisierte Gleitkommadarstellung
Beispiel 6.19: Normalisierung von Dualzahlen mit b=16
Die entsprechenden Argumentation wie in Beispiel 6.18 liefert für die Zahl
(0,000000110101)2 ⋅ 164
die normalisierte Darstellung
(0,00110101)2 ⋅ 163.
Man beachte, dass die erste dem Komma folgende Hexadezimal-Ziffer
ungleich Null ist.
Eine Veränderung des Exponenten um 1 entspricht einer Multiplikation mit
(bzw. Division durch) 16 (=24), so dass das Komma nicht um einzelne Stellen,
sondern immer nur um vier Stellen gleichzeitig verschoben werden kann.
Kapitel 6: Darstellung von Daten im Rechner
Seite 32 / 63
Gleitkommazahlen im Rechner
Für die rechnerinterne Darstellung von Gleitkommazahlen werden die Länge
(in Bits) der Mantisse und des Exponenten festgelegt.
Beispiel 6.20:
Stehen 32 Bits zur Verfügung, so kann eine Aufteilung wie folgt aussehen:
1 Bit für das Vorzeichen,
23 Bits für die Mantisse (in Vorzeichen- Betrags-Darstellung) und
8 Bits für den Exponenten zur Basis 2.
Die Mantisse wird normalisiert gespeichert, der Exponent im
Zweierkomplement.
Dann ist
0
11101001011000000000000
00001010
VZ
Mantisse
Exponent
die Darstellung der Zahl (0,11101001011)2 ⋅ 210 = (1110100101,1)2 = (933,5)10
Kapitel 6: Darstellung von Daten im Rechner
Seite 33 / 63
Darstellbarer Zahlenbereich
Mit der in Beispiel 6.20 vorgestellten Darstellung sind positive Zahlen z im
Bereich
0,5 × 2 −128 ≤ z ≤ (1 − 2−23 ) × 2127
und negative Zahlen z im Bereich
−(1 − 2−23 ) × 2127 ≤ z ≤ −0,5 × 2−128
darstellbar.
Um den Nullpunkt herum wird ein kleines „Loch“ auf der Zahlenachse nicht
erfasst. Das gilt insbesondere auch für die Null selbst, da für sie keine
normalisierte Darstellung existiert.
Zur Darstellung von Null wird deshalb von der üblichen Konvention
abgewichen. 0,0 ist darstellbar mit Vorzeichen 0 und Exponent 0, der Wert der
Mantisse wird ignoriert.
Kapitel 6: Darstellung von Daten im Rechner
Seite 34 / 63
Hidden Bit
Durch diese Darstellung der Null wird auch das folgende Problem gelöst:
Ist die Basis des Exponenten 2, so steht in der normalisierten Darstellung an
erster Stelle hinter dem Komma immer eine Eins.
Sie kann also bei der Darstellung im Speicher weggelassen werden, man
spricht dann von einem Hidden Bit.
Dieses Bit steht dann der Mantisse zur Verfügung, so dass sich ihre
Genauigkeit erhöht.
Beispiel 6.21:
Die Mantissen-Bitfolge 00…00 steht dann nicht für die Zahl 0,0... sondern
für 0,10..., also für ½.
Eine Verwechslung mit 0,0 ist also durch eine Sonderregelung auszuschließen.
Kapitel 6: Darstellung von Daten im Rechner
Seite 35 / 63
Vergleich Festkomma-/Gleitkommadarstellung
Größte darstellbare Zahl
Genauigkeit
Festkommadarstellung
(32 Bit)
232-1
32 Bits - ca. 10 Dezimalstellen
Gleitkommadarstellung
(32 Bit, wie oben vorgestellt)
§2127
23 Bits - ca. 7 Dezimalstellen
Unter der Verwendung von Gleitkommazahlen ist ein erheblich größerer
Zahlenbereich darstellbar als mit der Festkommadarstellung.
Allerdings leidet darunter die Genauigkeit, die bei der Festkommadarstellung
höher ist.
Die Diskrepanz zwischen Genauigkeit und darstellbarem Zahlenbereich der
Gleitkommadarstellung wird durch Verwendung einer anderen Basis als 2
vergrößert.
Kapitel 6: Darstellung von Daten im Rechner
Seite 36 / 63
Excess-Darstellung
Die Exponenten werden häufig nicht im Zweier-Komplement, sondern in der
Excess-Darstellung (auch Biased-Notation genannt) dargestellt.
Beispiel 6.22: Excess-Darstellung
Betrachten wir durch 8 Bits dargestellte Exponenten d, für welche bei
Verwendung des Zweier-Komplementes -128 ≤ d ≤127 gilt.
Durch Addition von 128=28-1 zu jedem d erhält man einen Exponenten d‘ im
Bereich 0 ≤ d‘ ≤ 255.
Durch diese Verschiebung wird der Vergleich zweier Exponenten vereinfacht
(z.B. für die Anpassung zweier Operanden bei der Addition), gilt d1 < d2, dann
gilt das auch für die gewöhnlichen Dualdarstellungen von d1 und d2.
Allgemein erhält man die Excess-Darstellung d‘ eines Exponenten d bei g Bits
durch:
d‘=d+2g-1.
Für g=8 spricht man von der Excess-128-Darstellung.
Kapitel 6: Darstellung von Daten im Rechner
Seite 37 / 63
IEEE 754
Das IEEE 754 Standard Floating Point Number Format ist eine sehr häufig
verwendete Gleitkommadarstellung.
Für 32 Bit sieht dieses Format wie folgt aus:
ƒ
Das erste Bit ist ein Vorzeichenbit:
• 0 steht für eine positive Zahl,
• 1 für eine negative Zahl.
ƒ
Die folgenden acht Bit nehmen den Exponenten auf
• Er ist in der Excess-127-Darstellung gespeichert.
• Von dem Exponenten muss der Wert 127 subtrahiert werden, um den tatsächlichen
Exponenten zu ermitteln.
• Die Basis des Exponenten ist 2.
ƒ
Die letzten 23 Bits nehmen die Mantisse auf:
• sie ist normalisiert als 1,… (die erste 1 steht also vor dem Komma!) und
• hat als hidden Bit die 1 vor dem Komma.
0
VZ
1
…
Exponent E
Kapitel 6: Darstellung von Daten im Rechner
8 9
…
31
Mantisse M
Seite 38 / 63
IEEE 754
Eine Gleitkommazahl im IEEE 754-Format repräsentiert also die Zahl N mit:
N = VZ 1,M × 2E-127.
Beispiel 6.23:
Die Zahl N= -0,75 wird dargestellt als
1
01111110
10000000000000000000000
-
126-127=-1
1,5
N = −(1,1)2 × 2 −1 = −1,5 × 0,5 = −0,75
Für das Rechnen mit Zahlen im IEEE 754-Format gelten die gleichen Regeln,
wie für die bisher bekannte Gleitkommadarstellung.
Kapitel 6: Darstellung von Daten im Rechner
Seite 39 / 63
IEEE 754 - reservierte Zahlen
Im IEEE 754-Format werden einige Fehler- und Sonderfälle durch bestimmte
Zahlen dargestellt.
Es gibt solche reservierte Zahlformate für die folgenden Fälle:
E=0
E=255
M=0
Null
NaN
M0
Denormalisiert
Unendlich
ƒ
Not a Number (NaN) wird verwendet, wenn das Ergebnis einer Operation keine
gültige Zahl erzeugt (z.B. Wurzel einer negativen Zahl).
ƒ
ƒ
Unendlichkeit: Wird verwendet als ± ’, je nach Vorzeichen.
Denormalisiert: Die Zahl ist nicht Null, aber zu klein, um sie normalisiert zu
speichern, dann wird sie denormalisiert, also als 0.M dargestellt.
Null: stellt die Zahl 0 dar.
ƒ
Kapitel 6: Darstellung von Daten im Rechner
Seite 40 / 63
Multiplikation
In Kapitel 3 und 5 wurden Addiernetze und -werke vorgestellt.
Diese können im Allgemeinen auch zur Multiplikation und zur Division
verwendet werden.
Grundsätzlich wird die Multiplikation im Dualsystem in der gleichen Weise
durchgeführt wie im Dezimalsystem nach der Schulrechenmethode:
ƒ
ƒ
ƒ
Der Multiplikand wird nacheinander mit jedem einzelnen Bit des Multiplikators
multipliziert, dabei entsteht jeweils ein Teilprodukt.
Beginnt man mit dem am weitesten rechts stehenden Bit, so wird ab der zweiten
Stelle das Teilprodukt um jeweils eine Stelle nach links verschoben.
Das Ergebnis erhält man durch Summation aller Teilprodukte.
Kapitel 6: Darstellung von Daten im Rechner
Seite 41 / 63
Multiplikation
Beispiel 6.24: Multiplikation im Dualsystem
Wir betrachten die Aufgabe 12 ⋅ 9:
1 2 Multiplikand
9 Multiplikator
1 8
9
1 1 0 0 Multiplikand
1 0 0 1 Multiplikator
1 1 0 0
0 0 0 0
Teilprodukte
1 0 8 Ergebnis
0 0 0 0
Teilprodukte
1 1 0 0
1 1 0 1 1 0 0 Ergebnis
Kapitel 6: Darstellung von Daten im Rechner
Seite 42 / 63
Multiplikation
Die Multiplikation erfordert einen höheren physikalischen Aufwand als die
Addition:
ƒ
ƒ
Es ist ein doppelt so langes Ergebnisregister erforderlich.
Die Hardware muss in der Lage sein, Shift-Operationen durchzuführen.
Zudem ist die Schulmethode nicht effizient:
ƒ
ƒ
Nullen im Multiplikator erfordern den gleichen Aufwand beim Multiplizieren wie die
Einsen, tragen aber nichts zum Ergebnis bei.
Teilprodukte müssen zwischengespeichert werden, um sie anschließend zu
addieren.
Kapitel 6: Darstellung von Daten im Rechner
Seite 43 / 63
Multiplikation - Verbesserung der Methode
Formal ist das Schulrechenverfahren wie folgt beschreibbar:
Sei x der Multiplikant, y=(yn-1,…y0) der Multiplikator, dann ist
x< y = x< y0 + x< y1 <2 + x< y2 <22 + ... + x< yn −1 <2n −1
n −1
= ∑ x< yi <2i
i =0
In der Praxis ist es sinnvoll jeden Term zu addieren, sobald er generiert wurde,
so dass die Multiplikation wie folgt ausgeführt wird:
x< y = (...(( x< y0 + x< y1 <2) + x< y2 <22 ) + ... + x< yn −1 < 2n −1 )
Kapitel 6: Darstellung von Daten im Rechner
Seite 44 / 63
Multiplikation - Schaltung
Man kommt ohne ein doppelt so langes
Register zur Aufnahme des Ergebnisses
aus, wenn man die Eingaben auf halbe
Wortlänge beschränkt.
Damit ist die gezeigte Schaltung in der
Lage, die in Beispiel 6.24 gezeigte
Multiplikation auszuführen.
Kapitel 6: Darstellung von Daten im Rechner
Seite 45 / 63
Multiplikation - Funktionsweise der Schaltung
Die Multiplikation mit der Schaltung läuft wie folgt ab:
ƒ
ƒ
ƒ
Der Akku-Inhalt wird gelöscht.
Die rechten 4 Bits des X-Registers nehmen den Multiplikanden auf, Y den
Multiplikator.
Eine zusätzliche Logik (in der Abbildung nicht gezeigt),überprüft das Bit Null von Y.
• Ist dieses Bit =1, dann wird der Inhalt von X zum Akku-Inhalt addiert.
• Ist das Bit =0, dann bleibt der Akku-Inhalt unverändert.
• Anschließend wird der Inhalt von Y um ein Bit nach rechts, der Inhalt von X um ein Bit
nach links geschoben und wieder Bit 0 von Y überprüft.
ƒ
Stehen im Register Y nur noch Nullen, ist die Rechnung beendet, das Ergebnis der
Multiplikation steht im Akku.
Kapitel 6: Darstellung von Daten im Rechner
Seite 46 / 63
Multiplikation - Funktionsweise der Schaltung
Beispiel 6.25:
Multiplizieren wir wieder 12 und 9, dann arbeitet die Schaltung wie folgt:
Initialisierung
Kapitel 6: Darstellung von Daten im Rechner
Addieren
Shift
Seite 47 / 63
Multiplikation - Funktionsweise der Schaltung
Beispiel 6.25 (Fortsetzung):
Add/Shift
Kapitel 6: Darstellung von Daten im Rechner
Add/Shift
Add/Shift
Seite 48 / 63
Beschleunigung der Schulmethode
Die dargestellte Multiplikation nach der Schulmethode lässt sich beschleunigen.
ƒ
Verwendung eines Addiernetzes mit schneller Carry-Berechnung
ƒ
Zwischenspeicherung des bei der Addition auftretenden Übertrags und
Verarbeitung desselben erst in späteren Schritten
ƒ
Malnehmen des Multiplikanden in jedem Schritt nicht nur mit einem Bit des
Multiplikators, sondern mit k > 1 benachbarten Bits.
Grundlage schneller Multiplizierer sind schnelle Addierer.
Kapitel 6: Darstellung von Daten im Rechner
Seite 49 / 63
Carry-Save-Multiplikation
Wir verwenden als Addiernetz nun den Carry-Save-Adder
und entwerfen damit ein Carry-Save-Multiplikationsnetz.
Man kann die Multiplikation vierstelliger Dualzahlen in
tabellarischer Form darstellen:
Die Multiplikation lässt sich nun durch Addition der Zeilen
implementieren.
Bei vier Summanden reicht dazu ein zweistufiges CarrySave-Addiernetz aus.
Kapitel 6: Darstellung von Daten im Rechner
Seite 50 / 63
Rechenoperationen auf Gleitkommazahlen
Die bisherigen Verfahren und Schaltungen lassen sich auch zur Multiplikation
von Gleitkommazahlen verwenden, indem man die Mantissen und die
Exponenten nacheinander in der Hardware verarbeitet:
ƒ
ƒ
ƒ
Zur Multiplikation sind die Mantissen zu multiplizieren und die Exponenten zu
addieren.
Bei der Division werden die Mantissen dividiert, die Exponenten subtrahiert.
Bei der Addition und der Subtraktion muss man darauf achten, dass die
Operanden den gleichen Exponenten haben, dafür wird üblicherweise der
Operand mit dem niedrigsten Exponenten „denormalisiert“.
Durch die feste Wortlänge und die festgelegte Anzahl von Bits für Mantisse und
Exponent gelten für Gleitkommazahlen im Rechner nicht alle üblichen
Rechengesetze.
Kapitel 6: Darstellung von Daten im Rechner
Seite 51 / 63
Rechenoperationen auf Gleitkommazahlen
Beispiel 6.26: Assoziativgesetz
Sei x=+0,1567⋅ 103, y=+0,4322 ⋅ 105, z=-0,4323 ⋅ 105
So gilt für (x+y)+z:
x+y = +0,1567 ⋅ 103 +0,4322 ⋅ 105
Für x+(y+z):
y+z = +0,4322 ⋅ 105 -0,4323 ⋅ 105
= +0,0015 ⋅ 105 +0,4322 ⋅ 105
= -0,0001 ⋅ 105
= +0,4337 ⋅ 105
= -0,1000 ⋅ 102
(x+y)+z = +0,4337 ⋅ 105 -0,4323 ⋅ 105
x+(y+z) = +0,1567 ⋅ 103-0,1000 ⋅ 102
= +0,0014 ⋅ 105
= +0,1567 ⋅ 103-0,0100 ⋅ 103
= +0,1400 ⋅ 103
= +0,1467 ⋅ 103
Also folgt: (x+y)+z  x+(y+z). Das Assoziativgesetz gilt also nicht!
Kapitel 6: Darstellung von Daten im Rechner
Seite 52 / 63
Rechenoperationen auf Gleitkommazahlen
Für das Rechnen mit Gleitkommazahlen gelten die folgenden Regeln:
Seien
y = my <2
x = mx < 2 d x
dy
dann gilt:
x + y = (mx <2
dx −d y
+ m y )< 2
x − y = (mx <2
dx −d y
− m y )< 2
x< y = (mx <my )<2
falls d x ≤ d y
dy
falls d x ≤ d y
dx +d y
x / y = ( mx / m y ) < 2
Kapitel 6: Darstellung von Daten im Rechner
dy
dx −d y
Seite 53 / 63
Rechenoperationen auf Gleitkommazahlen
Sollen diese Operationen mit den bereits bekannten Addierwerken durchgeführt
werden, muss die Behandlung von Exponenten und Mantissen im Allgemeinen
softwaremäßig erfolgen.
Für eine Addition sind das die folgenden Operationen:
ƒ
ƒ
ƒ
ƒ
Vergleich der Exponenten
Shift der Mantisse der Zahl mit dem kleineren Exponenten
Ausführung der eigentlichen Addition
Ggf. Normalisierung des Ergebnisses.
Um dies über die Hardware zu steuern und damit die Ausführungszeit von
Gleitkomma-Operationen in ähnliche Dimensionen wie FestkommaOperationen zu bringen, sind viele Rechenanlagen mit separaten GleitkommaRechenwerken (Floating-Point-Prozessoren) ausgestattet. Diese verfügen
über hinreichend lange Register zur Aufnahme von Operanden bzw.
Ergebnissen, über eine geeignete Verknüpfungslogik und über ein eigenes
Steuerwerk.
Kapitel 6: Darstellung von Daten im Rechner
Seite 54 / 63
Overflow und Underflow
Bei Gleitkomma-Operationen können sowohl Over- als auch Underflows
auftreten:
Beispiel 6.27: Over- und Underflow
Die Addition
0,622
⋅
102
Die Subtraktion
0,622
+ 0,381
⋅
102
- 0,599
⋅
102
⋅
102
1,003 ⋅ 102
0,023 ⋅ 102
führt zu einem Overflow, da die Mantisse führt zu einem Underflow, da eine Null
des Ergebnisses eine signifikante Stelle
unmittelbar rechts vom Komma auftritt.
links vom Komma besitzt.
Beides ist durch eine Normalisierung zu beheben.
Da der Zwang zur Normalisierung evtl. ein Abschneiden signifikanter Stellen
erfordert, ist in der Gleitkomma-Arithmetik mit Rundungsfehlern zu rechnen.
Kapitel 6: Darstellung von Daten im Rechner
Seite 55 / 63
Darstellung alphanumerischer Daten
Bisher: Darstellung von Zahlen und Operationen auf diesen.
Jetzt: Darstellung von Texten.
Texte bestehen aus Charactern:
ƒ
ƒ
ƒ
ƒ
Buchstaben
Ziffern
Komma, Punkt
andere Sonderzeichen
Zur Darstellung der Character muss wieder eine rechnerinterne Darstellung aus
Bits gewählt werden.
Auch hier gibt es wieder mehrere Möglichkeiten.
Kapitel 6: Darstellung von Daten im Rechner
Seite 56 / 63
Codierung von Charactern
Frage: welchen Umfang soll der Zeichensatz haben?
Stehen 64 Speicherworte der Länge 6 Bits zur Verfügung, dann sind damit z.B.
darstellbar:
ƒ
ƒ
ƒ
26 Buchstaben
10 Ziffern
28 weitere Zeichen, z.B.: + ( ) # = ; : @ usw.
Nachteile:
ƒ
ƒ
ƒ
es fehlt eine Unterscheidung zwischen Klein- und Großbuchstaben, Signale zur
Kommunikation mit dem Rechner (z.B. „End of Message“) sind nicht
berücksichtigt.
Der Code ist nicht redundant - jedes Bit wird benötigt, es ist also nicht möglich, zu
überprüfen, ob während der Übertragung Fehler aufgetreten sind.
Bei modernen Rechnern ist die Wortlänge eine Zweierpotenz, 6 Bits können also
nicht optimal in einem Wort „untergebracht“ werden.
Deshalb wird diese Codierung nicht mehr verwendet.
Kapitel 6: Darstellung von Daten im Rechner
Seite 57 / 63
ASCII-Codierung
Heute werden bevorzugt 8-Bit-Darstellungen verwendet.
Ein weit verbreiteter Standard ist der ASCII-Code (American Standard-Code for
Information Interchange), welcher den folgenden Aufbau hat:
Kapitel 6: Darstellung von Daten im Rechner
Seite 58 / 63
ASCII-Code
Die angegebenen Steuerzeichen haben die folgende Bedeutung:
NULL
null character
CR
Carriage Return
SOM
Start of Message
SO
Shift Out
EOA
End of Address
SI
Shift In
EOM
End of Message
DC0-DC4
Device Control
EOT
End of Transmission
ERR
Error
WRU
„Who are you“ (enquiry)
SYNC
Synchronous Idle
RU
„Are you … ?“
LEM
Logical End of Medium
BELL
Audible Signal
S0-S7
Separator Information
FE
Format Effector
ACK
Acknowledgement
HT / SK
Horizontal
Tabulation/Skip
UC
Unassigned Control
LF
Line Feed
ESC
Escape
V / TAB
Vertical Tabulation
DEL
Delete Idle
FF
Form Feed
Kapitel 6: Darstellung von Daten im Rechner
Seite 59 / 63
ASCII-Code
Das achte Bit, das in der Tabelle mit P angegeben ist, dient zur Paritätsprüfung:
Gerade Parität:
P:=
1, falls die Anzahl der Einsen in 7…1 ungerade ist
0, sonst
Ungerade Parität:
P:=
1, falls die Anzahl der Einsen in 7…1 gerade ist
0, sonst
Hier wird im Allgemeinen ungerade Parität benutzt.
Kapitel 6: Darstellung von Daten im Rechner
Seite 60 / 63
ASCII-Code - Beispiele
Beispiel 6. 28: Verwendung des ASCII-Codes:
Rufen wir um Hilfe, sieht das in ASCII-Codierung mit ungerader Parität so aus:
H
E
L
P
!
1100 1000
0100 0101
0100 1100
1101 0000
1010 0001
Mit dem Paritätsbit kann festgestellt werden, ob während der Übertragung ein
Bit gekippt ist:
Beispiel 6.29: Fehlerhafte Übertragung
Bei der Übertragung des Hilferufes ist beim Zeichen H ein Fehler aufgetreten.
Wir erhalten: 1100 1001. Das Paritätsbit ist 1 bei ungerader Parität, das Wort
enthält aber drei Einsen. Also muss ein Bit gekippt sein, die Übertragung muss
also wiederholt werden.
Kapitel 6: Darstellung von Daten im Rechner
Seite 61 / 63
EBCDIC-Code
Eine Erweiterung des BCD-Codes ist der von IBM entwickelte EBCDIC-Code
(Extended Binary Decimal Interchange Code), der ebenfalls 8 Bit lang ist.
Eine Ziffer wird dargestellt als 1111 gefolgt von ihrer BCD-Darstellung.
Beispiel 6.30: EBCDIC-Codierung einer Ziffer
Die Ziffer 6 wird codiert als 1111 0110.
Probleme:
ƒ
ƒ
Der EBCDIC-Code wird nur von IBM verwendet und unterstützt nicht den gleichen
Zeichensatz wie ASCII - die Darstellungen sind also nicht kompatibel.
Es gibt regional unterschiedliche Versionen des Codes: Ein europäischer EBCDICCode ist z.B. nicht mit dem asiatischen kompatibel, d.h. dass selbst IBMMainframes untereinander Kommunikationsprobleme haben können.
Kapitel 6: Darstellung von Daten im Rechner
Seite 62 / 63
Zusammenfassung
Darstellung (negativer) Zahlen:
ƒ
ƒ
ƒ
Vorzeichen/Betrag
Einer- und Zweierkomplement
BCD
Darstellung reeller Zahlen
ƒ
ƒ
Festkomma
Gleitkomma
• Excess-128-Darstellung
• IEEE
Rechnen mit den Darstellungen
Darstellung von Zeichen
ƒ
ƒ
6-Bit
8-Bit:
• ASCII
• EBCDIC
Kapitel 6: Darstellung von Daten im Rechner
Seite 63 / 63