übereinstimmen. Wegen mit n−1 0 ≤ z0 ≤ b − 1 und 0 ≤ ẑ ≤ b −1. Nach Induktionsannahme besitzt ẑ eine Darstellung n−2 ẑ = ẑn−2 · b 1 0 + · · · + ẑ1 · b + ẑ0 · b 1 0 + · · · + ẑ1 · b + ẑ0 · b ) · b z = (ẑn−2 · b + z0 n−1 2 1 0 + · · · + ẑ1 · b + ẑ0 · b + z0 · b = ẑn−2 · b eine Basis-b-Darstellung der Länge n für z . 1 z2 = z2′ , ... , ′ zn−1 = zn−1 . Damit ist auch die Darstellung von z eindeutig. • Führende Nullen werden manchmal nicht notiert. Besitzt z zwei solche Darstellungen, n−1 z − z0 n−1 ≤b −1 b ist nach Induktionsannahme die Basis-b-Darstellung dieser Zahl eindeutig, also z1 = z1′ , der Länge n − 1 zur Basis b. Damit ist n−2 0≤ 0 z = zn−1 · b + · · · + z1 · b + z0 · b n−1 ′ + · · · + z1′ · b1 + z0′ · b0 , = zn−1 · b 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 • 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: 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 124378 35 36 3.2.4 Rechnen in anderen Basen 3.2.5 Ziffernweise Addition und Multiplikation wie in der Grundschule Binärdarstellung negativer Zahlen Problem: Vorzeichen muss irgendwie dargestellt werden. • Ü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 +2510 = b 00011001 −2510 = b 10011001 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 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 ” 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 ⊕ 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 n−1 − 1), . . . , +2 1 1 1 1 0 1 0 1 37 −0= b 100 . . . 0 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 0 0 1 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 1 − 1), . . . , +2 1 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 0 0 0 0 0 1 −1 ⊕ Arithmetik mit negativen Zahlen wird relativ einfach (siehe folgendes Beispiel 19 und Bemerkung 20). 1 1 0 0 0 0 1 1 0 0 1 n−1 1 Weglassen der (neu hinzugekommenen) führenden 1 ergibt b − 6210 statt −61. 11000001 = 00111110 = Systematik ? 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 b − 1310 . Dies ist gerade die Darstellung von 00001101 = Addition von +3710 = b 00100101 und −2410 = b 00011000 = 11100111: 39 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). 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 41 −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 Frage: Kann man die um 1 zu kleinen Ergebnisse berichtigen ? n−1 , . . . , +2 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 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. 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 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 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. 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 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. 1 1 0 1 1 1 0 1 0 1 8 Dies ist die Darstellung von +11710 (= −97 − 42 + 2 ). Ursache: Ergebnis liegt außerhalb des darstellbaren Zahlenbereichs −2n−1, . . . , 2n−1 − 1. 45 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. 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 = b zn−p+1 . . . z1z0 0 ...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) 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 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 • (−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 36 3 Beispiele: a) Kaufmännische Rechnung mit Euro und Cent: 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). 6 623,51 + 1 059,76 − 230,50 7 452,77 b) Insgesamt 8-stellige (5+ 3) Zweierkomplement-Addition von 11 58 = b 01011.101 und −4 43 = b 00100.110+00000.001 = 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. 53 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 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 0 0 0 0 6 0 · · · 36 hat eine unendliDas exakte Ergebnis 1.363636 . . . = 1 99 che Dezimaldarstellung und muss gerundet werden (z.B. auf 1.36). 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 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 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. 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 · 21 ±1.01 · 21 ±1.10 · 21 ±1.11 · 21 1 • 1.5 = 1.50 × 10 = 0.15 × 10 , 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 = = = = ±1.00 · 20 ±1.01 · 20 ±1.10 · 20 ±1.11 · 20 38 3 Beispiel: b = 10, m = 3, emin = −3, emax = 1 0 = = = = ±0.25 ±0.3125 ±0.375 ±0.4375 = = = = ±0.5 ±0.625 ±0.75 ±0.875 9 > > > = Abstand 2−4 = 0.0625 > > > ; 9 > > > = Abstand 2−3 = 0.125 > > > ; 9 > > > = ±1 ±1.25 ±1.5 > > > ; ±1.75 9 = ±2 > > > = = ±2.5 = ±3 > > > ; = ±3.5 Abstand 2−2 = 0.25 Abstand 2−1 = 0.5 Denormalisierte Zahlen: 9 ±0.01 · 2−2 = ±0.0626 > = ±0.10 · 2−2 = ±0.125 > ±0.11 · 2−2 = ±0.1875 ; 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 ⊕ I. Allg. sind wesentlich kleinere und wesentlich größere Zahlen darstellbar als bei Fixkomma. ⇒ nahezu alle reellen (sogar rationalen) Zahlen müssen auf eine Gleitkomma-Zahl gerundet werden. – Größte darstellbare Zahl: z0 = . . . = z1−m = b − 1, e = emax « „ 1 e +1 e +1 zmax = 1 − m · b max ≈ b max b • 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: – 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 1.034 × 101 −0.05432 × 101 0.97968 × 101 für emin ≤ e ≤ emax . Keine dieser Darstellungen ist normalisiert. 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 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. 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 −126 −1022 emin 127 1023 emax 8 11 Länge des Exponentenfelds 24 53 Signifikandenlänge m Gesamtlänge in bit 32 64 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: Zahlenbereich: zmax 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.) N zmin zmin ε single 1 (1 − 224 ) · 2128 ≈ 3.403 · 1038 2−126 ≈ 1.175 · 10−38 2−149 ≈ 1.401 · 10−45 2−23 ≈ 1.192 · 10−7 double 1 (1 − 253 ) · 21024 ≈ 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 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. 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. 61 62 Neben normalisierten und denormalisierten Zahlen (wie in Abschnitt 3.2.9) sieht der IEEE-Standard für jede Genauigkeit noch • Null mit Vorzeichen Exponent • 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 70 72 (1.01001 × 2 ) · (1.001 × 2 ) −→ +∞ 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 Klassifikation der Zahlen mittels Exponent: Nachkommastellen normalisierte Zahlen: emin ≤ e ≤ emax z−1 . . . z1−m ±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 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 dargestellte Zahl 64