mit n−1 0 ≤ z0 ≤ b − 1 und 0 ≤ ẑ ≤ b −1. Nach Induktionsannahme besitzt ẑ eine Darstellung ẑ = ẑn−2 · bn−2 + · · · + ẑ1 · b1 + ẑ0 · b0 der Länge n − 1 zur Basis b. Damit ist n−2 1 0 z = (ẑn−2 · b + · · · + ẑ1 · b + ẑ0 · b ) · b + z0 n−1 2 1 0 = ẑn−2 · b + · · · + ẑ1 · b + ẑ0 · b + z0 · b eine Basis-b-Darstellung der Länge n für z . Besitzt z zwei solche Darstellungen, n−1 1 0 z = zn−1 · b + · · · + z1 · b + z0 · b ′ = zn−1 · bn−1 + · · · + z1′ · b1 + z0′ · b0 , so muss Division durch b denselben Rest ergeben, also ′ z0 = z0 . Damit müssen auch die Quotienten z − z0 n−2 1 0 = zn−1 · b + · · · + z2 · b + z1 · b b und z − z0′ ′ = zn−1 · bn−2 + · · · + z2′ · b1 + z1′ · b0 b 33 übereinstimmen. Wegen 0≤ z − z0 n−1 ≤b −1 b ist nach Induktionsannahme die Basis-b-Darstellung dieser Zahl eindeutig, also z1 = z1′ , z2 = z2′ , ... , ′ zn−1 = zn−1 . Damit ist auch die Darstellung von z eindeutig. • Führende Nullen werden manchmal nicht notiert. • Bei Bedarf wird die Basis tiefgestellt, z.B. 102213 . • Der Beweis liefert auch eine Methode zur Bestimmung der Basis-b-Darstellung von z : – Rest der Division z/b ist die Ziffer z0. – Übrige Ziffern aus der Basis-b-Darstellung des ganzzahligen Anteils von z/b. (−→ Rekursion) 16 3 Beispiel: Bestimme Basis-8-Darstellung von z = 540710 ( fünftausend vierhundert sieben“). ” 1. 5407 = 675 · 8 + 7, also z0 = 7 2. 675 = 84 · 8 + 3, also z1 = 3 34 3. 4. 5. 6. 7. 84 = 10 · 8 + 4, also z2 = 4 10 = 1 · 8 + 2, also z3 = 2 1 = 0 · 8 + 1, also z4 = 1 0 = 0 · 8 + 0, also z5 = 0 . . . (nur noch Nullen) Damit: 540710 = 124378 . Praktisch relevante Basen: • b = 10 (Dezimaldarstellung) — im Alltag übliche Darstellung mit den Ziffern 0, . . . , 9: 540710 • b = 2 (Binär-/Dualdarstellung) — in Rechnern dominierende Repräsentation mit den Ziffern 0 und 1: 10101000111112 • b = 16 (Hexadezimaldarstellung) — leichter lesbare Alternative zur Binärdarstellung mit den Ziffern 0, . . . , 9, A (= 10), B, C, D, E, F (= 15): 151F16 • b = 8 (Oktaldarstellung) — Alternative zur Binärdarstellung mit den Ziffern 0, . . . , 7: 124378 35 17 3 Bemerkung: Die Hexadezimal-/Oktaldarstellung erhält man aus der Binärdarstellung, indem man von hinten her jeweils 4 bzw. 3 Binärziffern zu einer Hexadezimal-/Oktalziffer zusammenfasst. 1 0101 0001 11112 = 151F16 1 010 100 011 1112 = 124378 (Bei Bedarf sind in der Binärdarstellung führende Nullen zu ergänzen.) Umgekehrt ergibt jede Hexadezimal-/Oktalziffer 4 bzw. 3 Ziffern in der Binärdarstellung. • Der weitaus größte Teil der Rechnung in Computern erfolgt im Binärsystem. • Ältere IBM-Rechner verwenden intern Hexadezimaldarstellung. • In kaufmännischen Anwendungen wird oft dezimal gerechnet — dann meist in BCD-Darstellung (binary coded decimals), d.h. jede Dezimalziffer wird mit 4 Binärziffern dargestellt: 4735210 = b 0100 0111 0011 0101 0010BCD 36 3.2.4 Rechnen in anderen Basen Ziffernweise Addition und Multiplikation wie in der Grundschule • Übertrag zur links benachbarten Ziffer, wenn Zwischenergebnis ≥ b. • Multiplikation in Basis 2 ist besonders einfach, da das kleine ” Einmaleins“ trivial ist: × 0 1 0 0 0 1 0 1 18 3 Beispiele: a) Addition in Basis 2 [ 7810 + 5910 = 13710 ] 1 0 0 1 1 1 0 + 0 1 1 1 0 1 1 Übertrag 1 1 1 1 1 1 1 0 0 0 1 0 0 1 b) Multiplikation in Basis 2 [ 1310 × 910 = 11710 ] 1 1 0 1 × 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 1 0 1 0 1 37 3.2.5 Binärdarstellung negativer Zahlen Problem: Vorzeichen muss irgendwie dargestellt werden. Explizite Speicherung des Vorzeichens: Vorzeichen kann mit einer zusätzlichen Binärziffer dargestellt werden (z.B. +“ durch ” 0, -“ durch 1 — oder umgekehrt), also bei insgesamt 8 bit ” +2510 = b 00011001 −2510 = b 10011001 ⊕ Leicht zu verstehen ⊖ Arithmetik mit negativen Zahlen wird aufwändiger (Fallunterscheidung positiv“/ negativ“) ” ” ⊖ Zwei Darstellungen für die Null: +0= b 000 . . . 0 und • Mit n bit darstellbare Zahlen: n−1 −(2 −0= b 100 . . . 0 n−1 − 1), . . . , +2 38 −1 Einerkomplementdarstellung: Bei negativen Zahlen wird jedes bit invertiert (0 ↔ 1), also bei insgesamt 8 bit +2510 = b 00011001 −2510 = b 00011001 = 11100110 ⊖ Zwei Darstellungen für die Null: +0= b 000 . . . 0 und • Mit n bit darstellbare Zahlen: n−1 −(2 −0= b 111 . . . 1 n−1 − 1), . . . , +2 −1 ⊕ Arithmetik mit negativen Zahlen wird relativ einfach (siehe folgendes Beispiel 19 und Bemerkung 20). 19 3 Beispiel: Addition von −3710 = b 00100101 = 11011010 und +2410 = b 00011000: 1 1 0 1 1 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 1 1 0 0 1 0 Dies ist gerade die Darstellung von 00001101 = b − 1310 . Addition von +3710 = b 00100101 und −2410 = b 00011000 = 11100111: 39 0 0 1 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 Weglassen der (neu hinzugekommenen) führenden 1 ergibt 00001100 = b 1210 statt 13. Addition von −3710 = b 11011010 und −2410 = b 11100111: 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 Weglassen der (neu hinzugekommenen) führenden 1 ergibt b − 6210 statt −61. 11000001 = 00111110 = Systematik ? 20 3 Bemerkung: Invertierung einer binären Ziffer zk bedeutet Ersetzen durch 1 − zk . Also: Ist 0 ≤ z ≤ 2n−1 − 1 mit n-stelliger Binärdarstellung n−1 z = 0·2 n−2 + zn−2 · 2 1 so besitzt −z die Darstellung −z = 1 · 2n−1 + (1 − zn−2) · 2n−2 + · · · 1 0 + (1 − z1 ) · 2 + (1 − z0) · 2 40 0 + · · · + z1 · 2 + z0 · 2 , = (2n−1 + 2n−2 + · · · + 21 + 20) n−2 1 0 − (zn−2 · 2 + · · · + z1 · 2 + z0 · 2 ) = 2n − 1 − z ∈ {2n−1, . . . , 2n − 1} . • Addiert man die Einerkomplement-Darstellungen einer positiven Zahl x und einer negativen Zahl y wie gewöhnliche Binärzahlen, so erhält man die Binärdarstellung von x + y + 2n − 1. – Für x + y ≤ 0 ist x + y + 2n − 1 gerade die Einerkomplementdarstellung des korrekten Resultats x + y. – Für x+y > 0 ist x+y +2n −1 ≥ 2n und enthält damit eine führende Eins an Position n. Lässt man diese weg, so erhält man x + y − 1(≥ 0), also ein um 1 zu kleines Ergebnis. • Addiert man die Einerkomplemente zweier Zahlen x, y ≤ 0 mit −(2n−1 − 1) ≤ x + y (≤ 0) — d.h. die Summe ist im Einerkomplement darstellbar —, so erhält man n n (2 − 1 + x) + (2 − 1 + y) = 2n + (x + y + 2n − 1) − 1 . Diese Binärzahl hat eine führende Eins an Position n. Lässt man sie weg, so erhält man (x + y + 2n − 1) − 1, also wieder ein um 1 zu kleines Ergebnis (die korrekte Einerkomplement-Darstellung ist x + y + 2n − 1). Frage: Kann man die um 1 zu kleinen Ergebnisse berichtigen ? 41 Zweierkomplementdarstellung: Bei negativen Zahlen wird jedes bit invertiert und anschließend 1 addiert, also bei insgesamt 8 bit −2510 = b 00011001 + 00000001 = 11100110 + 00000001 = 11100111 ⊕ Eindeutige Darstellung für die Null: −0 = b = = = b 000 . . . 00 + 000 . . . 01 111 . . . 11 + 000 . . . 01 1 | 000 . . . 00 (neue führende Eins) +0 • Mit n bit darstellbare Zahlen: n−1 −2 n−1 , . . . , +2 −1 ⊕ Bei der Arithmetik kein Unterschied zwischen positiven und negativen Zahlen (siehe folgendes Beispiel 21). 21 3 Beispiel: Addition von −3710 = b 00100101+00000001 = 11011011 und +2410 = b 00011000: 1 1 0 1 1 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 42 Dies ist gerade die Darstellung von −1310 = b 00001101 + 00000001 Addition von +3710 = b 00100101 und −2410 = b 00011000 + 00000001 = 11101000: 0 0 1 0 0 1 0 1 1 1 1 0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 0 1 Weglassen der (neu hinzugekommenen) führenden 1 ergibt 00001101 = b 1310 . Addition von −3710 = b 11011011 und −2410 = b 11101000: 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 Weglassen der (neu hinzugekommenen) führenden 1 ergibt 11000011 = 00111101 + 00000001 = b − 6110 . In allen Fällen richtiges Ergebnis ! 22 3 Bemerkung: Die Darstellung einer negativen Zahl x mit −2n−1 ≤ x < 0 mit n Ziffern im Zweierkomplement ist identisch mit der gewöhnlichen Binärdarstellung der positiven Zahl x + 2n . 43 23 3 Bemerkung: Die Darstellung einer Zahl im Zweierkomplement mit m ≥ n Ziffern erhält man aus der mit n Ziffern dadurch, dass man die vorderen m − n Plätze alle mit dem (bisher) führenden bit auffüllt. 44 3.2.6 Überlauf Wir gehen davon aus, dass die Zahlen im Zweierkomplement dargestellt werden. 24 3 Beispiel: Addition von 9710 = b 01100001 und 4210 = b 0010 1010 bei insgesamt 8 Binärstellen: 0 1 1 0 0 0 0 1 0 0 1 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 Dies ist die Darstellung von −11710 (= 97 + 42 − 28). Zweierkomplement-Addition von −9710 = b 10011111 und −4210 = b 11010110: 1 0 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 0 1 0 1 Dies ist die Darstellung von +11710 (= −97 − 42 + 28). Ursache: Ergebnis liegt außerhalb des darstellbaren Zahlenbereichs −2n−1, . . . , 2n−1 − 1. 45 25 3 Definition: Das Überschreiten des Bereichs darstellbarer Zahlen wird als Überlauf (overflow) bezeichnet. Bei ganzen Zahlen führt ein Überlauf meist (z.B. im Zweierkomplement) zu einem sog. wrap-around, d.h. bei n-stelliger Darstellung ist das Resultat um 2n zu groß oder zu klein. 26 3 Satz: Tritt kein Überlauf ein, so ist das Ergebnis der übli” chen“ Addition der n-stelligen Zweierkomplement-Darstellungen zweier Zahlen die Darstellung des Ergebnisses im Zweierkomplement. Dabei ist eine evtl. durch Übertrag neu auftretende Eins an Position n zu vernachlässigen. Beweis: Sei z = x + y . Es ist −2n−1 ≤ x, y ≤ 2n−1 − 1. Weil kein Überlauf eintritt, ist auch −2n−1 ≤ z ≤ 2n−1 − 1. Fall 1: x ≥ 0, y ≥ 0. Dann wird sowieso ’normal’ gerechnet. Fall 2: x < 0, y ≥ 0, z ≥ 0. Dann wird x dargestellt durch 2n + x, die Addition der Darstellungen ergibt 2n + x + y = 2n + z mit z ≥ 0. Also ist durch Übertrag eine führende Eins an Position n aufgetreten, die vernachlässigt wird. Man hat statt 2n + z also z , die Zweierkomplement-Darstellung von z ≥ 0. 46 Fall 3: x < 0, y ≥ 0, z < 0. Wieder wird x dargestellt durch 2n + x, die Addition der Darstellungen ergibt 2n + x + y = 2n + z mit z < 0. Dies ist die Zweierkomplement-Darstellung der negativen Zahl z . Fall 4: x < 0, y < 0. Dann wird x dargestellt durch 2n + x, y durch 2n + y . Die Addition der Darstellungen ergibt 2n+1 + x + y = 2n + 2n + z . Weil Überlauf ausgeschlossen wurde, ist −2n−1 ≤ z < −1 und damit 2n−1 ≤ 2n + z < 2n − 1. In 2n + (2n + z) steht also eine führende Eins an Position n, die vernachlässigt wird. Man erhält deshalb statt 2n + (2n + z) die Zahl 2n + z , die Zweierkomplement-Darstellung von z < 0. 27 3 Bemerkung: Bei der Steuerung der Ariane 5 wurde die gemessene horizontale Geschwindigkeit in eine 16-stellige (ganze) Binärzahl umgewandelt. Da das Ergebnis aber größer war als 215 − 1 = 32767, ergab sich ein Überlauf, der letztlich die Selbstzerstörung der Rakete und des Satelliten zur Folge hatte. Schaden: ca. 500 Millionen $. 47 3.2.7 Ganzzahl-Arithmetik und Shifts Ausgangspunkt: Zahlen sind mit n Zifferen im Zweierkomplement dargestellt. n−1 n−p z = zn−1 · 2 + · · · + zn−p · 2 + zn−p−1 · 2n−p−1 + · · · + z1 · 21 + z0 · 20 = b zn−1 . . . zn−p zn−p−1 . . . z1z0 {z }| {z } | p n−p Multiplikation von z mit einer Zweierpotenz 2p ergibt 2p · z = zn−1 · 2n−1+p + · · · + zn−p · 2n | n−1 p + zn−p+1 · 2 + · · · + z0 · 2 p−1 0 +0·2 + ··· + 0 · 2 ...0 = b zn−p+1 . . . z1z0 0 {z } | {z } | p n−p Die Ziffern zn, . . . , zn−p fallen weg. War eine davon 1, so ist ein Überlauf eingetreten. 28 3 Korollar: Tritt kein Überlauf ein, so entspricht die Multiplikation einer nichtnegativen Binärzahl z mit einer Zweierpotenz 2p dem Verschieben der Ziffern um p Positionen nach links und Auffüllen mit p Nullen von rechts. Die ersten p Ziffern von z fallen weg. 48 Ist z negativ, so ist die Zweierkomplement-Darstellung von z identisch mit der Binärdarstellung der positiven Zahl z+2n. Verschieben der Ziffern um p nach links und Auffüllen mit p Nullen von rechts liefert daher die Binärdarstellung von 2p · (z + 2n) = 2p · z + 2n+p, also die Darstellung von 2p · z im Zweierkomplement mit n + p Ziffern. • Sind die Ziffern zn−p, . . . , zn alle 1 und lässt man sie nun weg, so erhält man nach Bem.23 die ZweierkomplementDarstellung von 2p · z mit n Ziffern. • Sind die Ziffern zn−p, . . . , zp nicht alle gleich 1, so ist 2p · z < −2n−1, d.h. es ist ein Überlauf eingetreten. Also: 29 3 Korollar: Korollar 28 gilt auch für die Multiplikation einer (im Zweierkomplement dargstellten) negativen Zahl mit einer Zweierpotenz. 30 3 Definition: Das Verschieben der bits um p Positionen nach links (rechts) mit Auffüllen durch Nullen heißt bitweiser (Links-/Rechts-) Shift um p Positionen. 49 Division einer nicht-negativen n-stelligen ganzen Zahl z = zn−1 · 2n−1 + · · · + zp · 2p p−1 1 0 + zp−1 · 2 + · · · + z1 · 2 + z0 · 2 = b zn−1 . . . zp zp−1 . . . z1z0 | {z } | {z } p n−p durch eine Zweierpotenz 2p ergibt p z/2 n−1−p 0 = zn−1 · 2 + · · · + zp · 2 , Rest: zp−1 · 2p−1 + · · · + z0 · 20 = b 0 . . 0} zn−1 . . . zp+1zp , | .{z {z } | p n−p Rest: zp−1 . . . z0 31 3 Korollar: Die Division einer nichtnegativen Binärzahl z durch eine Zweierpotenz 2p entspricht dem Verschieben der Ziffern um p Positionen nach rechts und Auffüllen mit p Nullen von links. Die letzten p Ziffern von z ergeben den Rest bei der Division. 50 32 3 Bemerkung: Bei der Division einer negativen Binärzahl z im Zweierkomplement durch eine Zweierpotenz 2p erhält man den in {0, . . . , 2p − 1} liegenden Rest aus den letzten p Ziffern von z , den ganzzahligen Anteil von z/2p durch Verschieben der Ziffern um p Positionen nach rechts und Auffüllen mit p Einsen von links. (ohne Beweis) 33 3 Definition: Das Verschieben der bits um p Positionen nach rechts mit Auffüllen durch das bisherige höchstwertige bit heißt arithmetischer (Rechts-) Shift um p Positionen. 51 34 3 Beispiele: Die Zahl z = 111110 besitzt die 16-stellige Binärdarstellung z = b 0000 0100 0101 0111, im Zweierkomplement ist −z = b 1111 1011 1010 1001. • 23 · z = 888810 = b 0010 0010 1011 1000 • 23 · (−z) = −888810 = b 1101 1101 0100 1000 • z/23 = 13810 = b 0000 0000 1000 1010, Rest 710 = b 111 • (−z)/23 = −13910 = b 1111 1111 0111 0101, Rest 110 = b 001 (Es ist −z = (−139) · 8 + 1). 52 3.2.8 Fixkomma-Darstellung nicht-ganzer Zahlen 35 3 Definition: Bei Fixkomma-Zahlen (fixed point numbers) wird die Basis-b-Darstellung um eine feste Anzahl von Nachkommastellen erweitert: z = zn−1 · bn−1 + · · · + z0 · b0 −1 −m + z−1 · b + · · · + z−m · b =: zn−1 . . . z0.z−1 . . . z−m Darstellbare Zahlen (bei Zweierkomplement-Darstellung zur Basis b = 2): −2n−1, −2n−1 + 2−m, . . . , 2n−1 − 2−m mit konstantem Abstand 2−m. Rechnen mit Fixkomma-Zahlen: So wie mit (n + m)-stelligen ganzen Zahlen, aber Multiplikation und Division erfordern weitere Maßnahmen (siehe nachfolgende Beispiele 36). 53 36 3 Beispiele: a) Kaufmännische Rechnung mit Euro und Cent: 6 623,51 + 1 059,76 − 230,50 7 452,77 b) Insgesamt 8-stellige (5+ 3) Zweierkomplement-Addition von b 01011.101 und −4 34 = b 00100.110+00000.001 = 11 58 = 11011.010: 0 1 0 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1 1 1 1 0 0 1 1 0 1 1 1 Dies ist gerade die Darstellung des korrekten Ergebnisses 6 78 . c) Dezimale Multiplikation von 43.21 = 4321/100 mit 12.34 = 1234/100 bei m = 2 Nachkommastellen: 4 3 2 1 × 4 3 2 8 6 1 2 1 5 3 3 1 1 4 9 7 2 2 3 4 2 6 3 2 8 4 1 1 4 Das Ergebnis 5332114/10000 = 533.2114 ist bei m = 2 nicht exakt darstellbar und muss auf eine darstellbare Zahl (z.B. 533.21) gerundet werden. 54 d) Dezimale Division von 1.50 = 150/100 durch 1.10 = 110/100 bei m = 2: 1 5 0 1 1 0 4 0 3 3 7 6 / 1 1 0 = 1 3 6 3 6 ... 0 0 0 6 4 3 0 0 0 3 7 6 0 0 0 0 6 0 · · · Das exakte Ergebnis 1.363636 . . . = 1 36 99 hat eine unendliche Dezimaldarstellung und muss gerundet werden (z.B. auf 1.36). 37 3 Bemerkungen: a) Addition und Subtraktion von Fixkommazahlen liefern stets das exakte Ergebnis (sofern kein Überlauf auftritt), Multiplikation und Division sind i. Allg. mit Rundungsfehlern behaftet. 55 b) Die Anhäufung von Rundungsfehlern in einem FixkommaZähler für die Zeit war verantwortlich dafür, dass am 25. 2. 1991 im Golfkrieg eine Scud-Rakete von einer PatriotAbwehrrakete verfehlt wurde (28 Tote) • Uhr der Patriot liefert Zeit seit Einschalten in Zehntelsekunden • Umrechnung in Sekunden mit 23 binären Nachkommastellen erforderte Rundung der Zahl 1 = b 0.000110011001100110011001100110 . . . 10 ≈ 0.00011001100110011001100 mit einem Rundungsfehler von ca. 0.00000009510 • Jede Zehntelsekunde wird dieser Wert zum Zähler addiert • Nach 100 Stunden Dauerbetrieb erhöhte sich dadurch der Fehler im Zeitzähler auf 100 × 60 × 60 × 10 × 0.000000095 ≈ 0.34 • In 0.34 Sekunden fliegt eine Scud ca. 600 m und kann so den vom Patriot-System überwachten Bereich verlassen 56 3.2.9 Gleitkomma-Darstellung nichtganzer Zahlen Gleitkomma-Zahlen (floating-point numbers) besitzen die Form −1 1−m z = ±(z0 + z−1 · b + . . . z1−m · b =: ±z0.z−1 . . . z1−m × be e )·b mit zk ∈ {0, . . . b − 1} und emin ≤ e ≤ emax . Dabei heißt z0.z−1 . . . z1−m der Signifikand (früher meist Mantisse) und e der Exponent der Zahl z . b heißt die Basis, m die Signifikandenlänge (oder Mantissenlänge) und {emin , . . . , emax } der Exponentenbereich der Gleitkomma-Darstellung. 38 3 Beispiel: b = 10, m = 3, emin = −3, emax = 1 • 1.5 = 1.50 × 100 = 0.15 × 101 , d.h. die Darstellung ist i. Allg. nicht eindeutig. • −0.00150 = −1.50 × 10−3 = −0.15 × 10−2 • 150 (= 1.50 × 102 ) ist nicht darstellbar • 1.501 ist ebenfalls nicht (exakt) darstellbar und muss (z.B. auf 1.50 × 100) gerundet werden. 39 3 Definition: Eine Gleitkomma-Zahl ±z0.z−1 . . . z1−m × be heißt normalisiert, wenn z0 6= 0. Eine Gleitkomma-Zahl z 6= 0 mit z0 = 0 heißt denormalisiert. 57 40 3 Beispiel: b = 2, m = 3, emin = −2, emax = 1 Normalisierte Zahlen: ±1.00 · 2−2 ±1.01 · 2−2 ±1.10 · 2−2 ±1.11 · 2−2 ±1.00 · 2−1 ±1.01 · 2−1 ±1.10 · 2−1 ±1.11 · 2−1 = = = = = = = = ±1.00 · 20 ±1.01 · 20 ±1.10 · 20 ±1.11 · 20 ±1.00 · 21 ±1.01 · 21 ±1.10 · 21 ±1.11 · 21 ±0.25 ±0.3125 ±0.375 ±0.4375 = = = = ±0.5 ±0.625 ±0.75 ±0.875 = = = = ±1 ±1.25 ±1.5 ±1.75 ±2 ±2.5 ±3 ±3.5 9 > > > = Abstand 2−4 = 0.0625 > > > ; 9 > > > = Abstand 2−3 = 0.125 > > > ; 9 > > > = Abstand 2−2 = 0.25 > > > ; 9 > > > = Abstand 2−1 = 0.5 > > > ; Denormalisierte Zahlen: 9 ±0.01 · 2 = ±0.0626 > = −2 ±0.10 · 2 = ±0.125 > ±0.11 · 2−2 = ±0.1875 ; −2 Abstand 2−4 = 0.0625 Null: 0 −3 −2 −1 0 1 2 3 - 58 • Für festes b, m, emin , emax gibt es nur endlich viele Gleitkomma-Zahlen ⇒ nahezu alle reellen (sogar rationalen) Zahlen müssen auf eine Gleitkomma-Zahl gerundet werden. • Die normalisierte Gleitkomma-Darstellung einer Zahl ist, wenn sie überhaupt existiert, eindeutig. • Die Addition von Gleitkomma-Zahlen erfolgt i. Allg. in mehreren Schritten (hier für b = 10 und m = 4 am Beispiel von x = 10.34 = b 1.034 × 101 und y = −0.5432 = b − 5.432 × 10−1): 1) Exponentenabgleich: Damit die Signifikanden addiert werden können, müssen die Exponenten übereinstimmen: y = −0.05432 × 101 2) Addition der Signifikanden: 1.034 × 101 −0.05432 × 101 0.97968 × 101 3) Normalisierung und Rundung des Ergebnisses: 0 x + y = 9.797 × 10 ⊖ Im Gegensatz zur Fixkomma-Darstellung treten i. Allg. auch bei Addition und Subtraktion Rundungsfehler auf. 59 ⊕ I. Allg. sind wesentlich kleinere und wesentlich größere Zahlen darstellbar als bei Fixkomma. – Größte darstellbare Zahl: z0 = . . . = z1−m = b − 1, e = emax „ « 1 e +1 e +1 zmax = 1 − m · b max ≈ b max b – Kleinste positive normalisierte Zahl: z0 = 1, z−1 = . . . = z1−m = 0, e = emin N zmin = bemin – Kleinste positive Zahl: z0 = . . . z2−m = 0, z1−m = 1, e = emin zmin = bemin +1−m ⊖ Mehrere Darstellungen für die Null möglich: 0 = ±0.0 . . . 0 × be für emin ≤ e ≤ emax . Keine dieser Darstellungen ist normalisiert. Literatur: • David Goldberg: What every computer scientist should know about floating-point arithmetic. ACM Computing Surveys 23(1), March 1991, pp. 5–48. 60 3.2.10 Der IEEE-Standard Es gibt eigentlich zwei IEEE-Standards“ zu Gleitkomma-Forma” ten: • IEEE: IEEE standard for binary floating-point arithmetic. Technical Report IEEE Std 754-1985, The Institute of Electrical and Electronics Engineers, Inc., New York, 1985. für binäre Arithmetik • IEEE: IEEE standard for radix-independent floating-point arithmetic. Technical Report IEEE Std 854-1987, The Institute of Electrical and Electronics Engineers, Inc., New York, 1987. für Basen 2 und 10 Wir werden im Folgenden hauptsächlich den Standard 754 betrachten. Er legt einheitliche Formate für die Codierung von binären Gleitkomma-Zahlen fest: Vorzeichen Exponentenfeld Nachkommastellen Vorzeichen: Explizite Speicherung des Vorzeichens im vordersten bit (0 = b +“, 1 = b −“) ” ” Exponentenfeld enthält den verschobenen“ ( biased“) Exponen” ” ten e − emin + 1 > 0. (Dadurch entsprechen kleinere Exponenten kleineren positiven Zahlen.) Nachkommastellenfeld enthält den Signifikanden mit hidden bitTrick: Bei (de)normalisierten Gleitkomma-Zahlen ist immer z0 = 1 (z0 = 0), muss also nicht abgespeichert werden. Für Signifikandenlänge m werden also nur m − 1 bit benötigt. 61 Der IEEE-Standard sieht vier Genauigkeiten vor: single, singleextended, double und double-extended. 41 3 Bemerkung: Alle heutigen Prozessoren unterstützen zumindest die IEEE single- und double-Formate. single double Länge des Vorzeichenfelds 1 1 emin −126 −1022 127 1023 emax Länge des Exponentenfelds 8 11 24 53 Signifikandenlänge m Gesamtlänge in bit 32 64 Zahlenbereich: zmax N zmin zmin ε single 1 ) · 2128 (1 − 224 ≈ 3.403 · 1038 2−126 ≈ 1.175 · 10−38 2−149 ≈ 1.401 · 10−45 2−23 ≈ 1.192 · 10−7 double 1 ) · 21024 (1 − 253 ≈ 1.798 · 10308 2−1022 ≈ 2.225 · 10−308 2−1074 ≈ 4.941 · 10−324 2−52 ≈ 2.220 · 10−16 Dabei ist ε der Abstand von 1 zur nächstgrößeren Zahl: ε = min{z : z Gleitkomma-Zahl, z > 1} − 1 Dies bedeutet: Runden auf eine Gleitkomma-Zahl ergibt bei single precision i. Allg. einen Fehler in der 7-ten, bei double precision in der 16-ten Dezimalstelle. 62 Neben normalisierten und denormalisierten Zahlen (wie in Abschnitt 3.2.9) sieht der IEEE-Standard für jede Genauigkeit noch • Null mit Vorzeichen • zusätzliche spezielle Werte (∞ und NaN) vor. Sinn dieser Werte ist es, möglichst viel Information über die bisherige Rechnung zu retten, wenn nicht mehr darstellbare Zahlen auftreten. Unendlich (±∞): Dieser Wert entsteht, wenn das Ergebnis einer Rechenoperation betragsmäßig größer als zmax wird (Überlauf), z.B. bei single precision (1.01001 × 270 ) · (1.001 × 272) −→ +∞ 70 72 (−1.01001 × 2 ) · (1.001 × 2 ) −→ −∞ Null mit Vorzeichen (signed zero): Entsteht etwa, wenn das Ergebnis einer Rechenoperation betragsmäßig kleiner als zmin wird (Unterlauf), z.B. bei single precision −70 (1.001 × 2 82 )/(1.10111 × 2 ) −→ +0 −1/(+∞) −→ −0 NaN ( not a number“): Entsteht, wenn eine Operation kein klar ” definiertes Ergebnis liefert, z.B. √ −2 −→ NaN ±0/(±0) −→ NaN (+∞) − (+∞) −→ NaN NaN ± z −→ NaN 63 Klassifikation der Zahlen mittels Exponent: Exponent Nachkommastellen normalisierte Zahlen: emin ≤ e ≤ emax z−1 . . . z1−m dargestellte Zahl ±1.z−1 . . . z1−m · 2e denormalisierte Zahlen: emin − 1 z−1 . . . z1−m 6= 0 ±0.z−1 . . . z1−m · 2emin Null: emin − 1 spezielle Werte: emax + 1 emax + 1 z−1 . . . z1−m = 0 ±0 z−1 . . . z1−m = 0 z−1 . . . z1−m 6= 0 ±∞ NaN 64