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 M0 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