Vorlesung Informatik I Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik Theorie: Zahlen- und Zeichendarstellungen 1 Inhalt Motivation Technische Beschränkung für Rechner: Es ist nur die Verarbeitung von n-Bit-Worten möglich (für ein festes n) Mit dieser Bitzahl muss man nun ganze Zahlen, reelle Zahlen, Zeichen, usw. darstellen (in der Praxis n abhängig vom Datentyp) Folgerung: Man kann nur endlich viele Zahlen/Zeichen darstellen 2 Inhalt Motivation Welche Zahlen sollen (exakt) codiert werden (zusammenhängender Bereich, ganze/gebrochene/reelle Zahlen?) Wie codiert man negative Zahlen? Mit welcher Genauigkeit (Rundungsfehler) codiert man reelle Zahlen? ... 3 Inhalt Motivation Wie lassen auf den Codierungen arithmetische Operationen realisieren? (x, y) op c Codierung (c(x), c(y)) x op y c Codierung op c(x op y) = c(x) op c(y) op ∈ {+, -, *, / } op ∈ {+, -, *, / } Wie muss op aussehen, damit das Diagramm kommutativ ist? 4 Inhalt Zahldarstellungen Vorzeichen-Betrag Exzeß-q 1-Komplement 2-Komplement Festpunkt Gleitpunkt Zeichendarstellungen ASCII Unicode 5 Notationen Ab jetzt benutzen wir ausschließlich n-Bit-Blockcodierungen Jedes Wort (der Länge n) über dem Alphabet {0,1} bezeichnen wir als Bitmuster (der Länge n) 6 Notationen c<Name>,n Bezeichnung einer Codierung <Name> n Abkürzung für den Namen der Codierung Anzahl der verwendeten Bit c<Name>,n(x) das zur Zahl x gehörende Bitmuster bzgl. der Codierung c<Name>,n 7 Notationen (b)<Name>,n Dekodierung des Bitmusters b: Zahl mit c<Name>,n((b)<Name>,n) = b b <Name> n ein Bitmuster Abkürzung für den Namen der Codierung Anzahl der verwendeten Bit 8 Binärdarstellung c2,n:{0, ..., 2n-1} → IBn Binärdarstellung in n Stellen, aufgefüllt mit führenden Nullen Beispiele: c2,8(7)=00000111, (00000111)2,8=7 Ungeeignet für negative Zahlen Was tun bei Bereichsüberschreitung? 9 Binärdarstellung: Dekodierung Für c2,n(x) = bn-1 ... b1b0 gilt x = (bn-1 ... b1b0 )2,n = Σ bi ⋅ 2i Berechnungschema: Addiere 2er-Potenzen 2n-1 4 2 1 bn-1 b2 b1 b0 10 Darstellung auch negativer Zahlen Darstellung eines Zahlbereiches A = {xu,xu+1,...,xo-1,xo}, mit: xu 0 xo xu < 0 < xo A maximal, d.h. |A| ≈ 2n A symmetrisch zum Nullpunkt, d.h. |xu| ≈ |xo| Arithmetische Operationen (auf codierten Zahlen) leicht zu realisieren (z.B. durch bitweise Operationen) 11 Vorzeichen-Betrag-Darstellung (VB) cVB,n:{-(2n-1-1),...,-0,+0,1,...,2n-1-1} → IBn cVB,n(x) := 0c2,n-1(|x|) cVB,n(x) := 1c2,n-1(|x|) , falls 0 ≤ x < 2n-1 , falls -2n-1 < x ≤ 0 Also: Positive Zahlen: Negative Zahlen: 0 Betrag in Dualdarstellung 1 Betrag in Dualdarstellung Beispiele cVB,8(7)= 0c2,7(7)=00000111, (1111)VB,4=-(111)2,3=-7 12 VB-Darstellung: Dekodierung Für cVB,n(x) = bn-1 ... b1b0 gilt n-2 x = (bn-1 ... b1b0)VB,n = (+/-) Σ i = 0 bi 2i bn-1 = (0/1) +/- 2n-2 4 2 1 0/1 bn-2 b2 b1 b0 13 VB-Darstellung: Dekodierung + 64 32 16 8 4 2 1 0 1 0 0 1 1 0 1 cVB,8(01001101) = +(64 + 8 + 4 + 1) = 77 14 VB-Darstellung: Arithmetik aufwendig...selbst überlegen: z.B. postive Zahl + negative Zahl = positive/negative Zahl?: Fallunterscheidung nötig Wird in der Praxis nicht verwendet 15 Exzeß-q-Darstellung (Eq) cEX-q,n:{-q,...,0,1,...,2n–1–q} → IBn cEx-q,n(x) := c2,n(x+q) q ganze nicht-negative Zahl Beispiele: cEx-32,8(7)=c2,8(7+32)=c2,8(39)=00100111 (0001)Ex-8,4=(0001)2,4-8=1-8=-7 16 Eq-Darstellung: In der Praxis q=2n-1 Codes für negative Zahlen 0 Codes für nicht-negative Zahlen 2n-1-1 2n-1 q=2n-1–1 Codes für nicht-positive Zahlen 0 2n-1-1 Codes für positive Zahlen 2n-1 17 Eq-Darstellung: Dekodierung Für cEx-q,n(x) =bn-1 ... b1b0 gilt n-1 x = (bn-1 ... b1b0 )Ex-q,n = Σ i = 0 bi ⋅ 2i – q q 2n-1 4 2 1 -1 bn-1 b2 b1 b0 18 Eq-Darstellung: Dekodierung 63 64 32 16 8 4 2 1 -1 1 0 0 1 1 0 1 cEx-q,7(1001101) = 64 + 8 + 4 + 1 - 63 = 14 19 Eq-Darstellung: Arithmetik Sei + die Addition, - die Subtraktion auf Dualzahlen Addition ⊕ (auf Exzeß-q-Darstellungen) (x, y) + c c (c(x),c(y)) x + y ⊕ c(x + y) = c(x) ⊕ c(y) 20 Eq-Darstellung: Arithmetik Addition ⊕ (auf Exzeß-q-Darstellungen) cEx-q,n(x) ⊕ cEx-q,n(y) = cEx-q,n(x+y) = c2,n(x+y+q) = c2,n(x+q) + c2,n(y+q) - c2,n(q) = cEx-q,n(x) + cEx-q,n(y) – c2,n(q) Beispiel: cEx-32,8(7)⊕ cEx-32,8(-7) = 00100111 + 00011001 – 00100000 = 00100000 21 Eq-Darstellung: Arithmetik Sei + die Addition, - die Subtraktion auf Dualzahlen Subtraktion Θ (auf Exzeß-q-Darstellungen) (x, y) - c c (c(x),c(y)) x - y Θ c(x - y) = c(x) Θ c(y) 22 Eq-Darstellung: Arithmetik Subtraktion Θ (auf Exzeß-q-Darstellungen) cEx-q,n(x) Θ cEx-q,n(y) = cEx-q,n(x-y) = c2,n(x-y+q) = c2,n(x+q) – c2,n(y+q) + c2,n(q) = cEx-q,n(x) – cEx-q,n(y) + c2,n(q) Beispiel: cEx-32,8(7) Θ cEx-32,8(-7) = 00100111 – 00011001 + 00100000 = 00101110 23 Eq-Darstellung: Arithmetik Bereichsüberlauf bei Addition/Subtraktion Ergebnis > 2n–1-q Ergebnis < -q führt in C-Programmen zu undefiniertem Verhalten 24 Eq-Darstellung: Arithmetik Multiplikation/Division: aufwendig Wird zur Darstellung des Exponenten bei Gleitpunktdarstellungen verwendet: da braucht man nur Addition / Subtraktion (später) 25 Komplement-Darstellungen Grundidee Wir betrachten eine feste ganze nicht-negative Zahl k Für eine ganze nichtnegative Zahl x ≤ k/2 sei x := k – x das Komplement von x bzgl. k 0 x k/2 k-x k 26 Komplement-Darstellungen Grundidee Stelle positive Zahlen durch Binärcodierung dar: c(x) := c2,n(x) Stelle negative Zahlen durch Binärcod. des Komplements dar: c(-x) := c2,n(x) = c2,n(k-x) Subtraktion durch Addition des Komplements: c(y)-c(x) = c(y)+c(-x) = c2,n(y)+c2,n(k-x) 27 2-Komplement-Darstellung (2K) Grundidee Wähle k so, dass Komplementbildung und Subtraktion von k leicht realisierbar sind: k = 2n (2-Komplement) Codes für nicht-negative Zahlen 0 x 2n-1 Codes für negative Zahlen 2n-x 2n-1 28 2K-Darstellung: Definition c2K,n : {-2n-1,...,0,1,...,2n-1 – 1} → IBn c2K,n(x) := c2,n(x) falls 0 ≤ x < 2n-1 c2K,n(x) := c2,n(2n + x) falls -2n-1 ≤ x < 0 Codes für nicht-negative Zahlen 0 x 2n-1 Codes für negative Zahlen 2n-x 2n-1 29 2K-Darstellung: Beispiele c2K,4(7)= c2,4(7)=0111 (0111)2K,4=7 c2K,4(-8)= c2,4(24-8)=1000 (1000)2K,4=-8 30 2K-Darstellung: Beispiele für n=4 (komplett) c2K,4(0) = 0000 c2K,4(1) = 0001 c2K,4(-1) = 1111 c2K,4(2) = 0010 c2K,4(-2) = 1110 ... ... c2K,4(7) = 0111 c2K,4(-7) = 1001 c2K,4(-8) = 1000 31 2K-Darstellung: Dekodierung Für c2K,n(x) = bn-1 ... b1b0 gilt n-2 x = (bn-1 ... b1b0 )2K,n = -bn-12n-1 + Σ bi ⋅ 2i -2n-1 2n-2 4 2 1 bn-1 b2 b1 b0 i = 0 bn-2 32 2K-Darstellung: Dekodierung -128 1 64 32 16 8 4 2 1 1 0 0 1 1 0 1 c2K,8(11001101) = 64 + 8 + 4 + 1 - 128 = -51 33 2K-Darstellung: Arithmetik Komplementbildung x∈{1,...,2n-1 - 1}, c2K,n(x) = c2,n(x) = bn-1...b1b0 Es gilt: c2K,n(-x) = c2,n(x) = c2,n(2n – 1) – c2,n(x) + c2,n(1) = (11...11)2,n - (bn-1 ... b1b0 )2,n + (00...01)2,n = ((1 - bn-1) ... (1 - b1)(1 – b0))2,n + (00...01)2,n Komplementbildung = „Kippen“ aller Bits und Addition von 1 34 2K-Darstellung: Arithmetik Komplementbildung – Beispiele Komplementbildung = „Kippen“ aller Bits und Addition von 1 c2K,4(7)= c2,4(7)=0111 c2K,4(-7)= 1000 + 0001 = 1001 35 2K-Darstellung: Arithmetik Addition (anschaulich): einer positiven Zahl y: y Schritte gegen Uhrzeigersinn. einer negativen Zahl y: y Schritte im Uhrzeigersinn. Subtraktion: Addition des Komplements 36 2K-Darstellung: Arithmetik Addition - formal c2K,n(x)⊕ c2K,n (y) := (c2K,n(x) + c2K,n(y)) modulo 2n + ist die Addition auf Dualzahlen modulo 2n bedeutet anschaulich: „Ignorieren“ des Überlaufs (führende 1 ignorieren, falls Ergebnis n+1 Stellen hat) 37 2K-Darstellung: Arithmetik Addition - Beispiele c2K,n(x)⊕ c2K,n (y) := (c2K,n(x) + c2K,n(y)) modulo 2n c2K,4(4)⊕ c2K,4 (3) = (0100 + 0011) modulo 24 = 0111 c2K,4(4)⊕ c2K,4 (-3) =(0100 + 1101) modulo 24 = 0001 c2K,4(-4)⊕ c2K,4 (3) =(1100 + 0011) modulo 24 = 1111 c2K,4(-4)⊕ c2K,4 (-3)=(1100 + 1101) modulo 24 = 1001 38 2K-Darstellung: Arithmetik Addition - Beweis Rechnung für 2n-1 > x,y ≥ 0, x+y < 2n-1: c2K,n(x)⊕ c2K,n (y) = c2K,n(x+y) = c2,n(x+y) = c2,n(x) + c2,n(y) = (c2,n(x) + c2,n(y)) modulo 2n = (c2K,n(x) + c2K,n(y)) modulo 2n 39 2K-Darstellung: Arithmetik Addition - Beweis Rechnung für 2n-1 > x ≥ 0,0 > y ≥ −2n-1, x+y < 0: c2K,n(x)⊕ c2K,n (y) = c2K,n(x+y) = c2,n(x+y+2n) = c2,n(x+y+2n) modulo 2n = (c2,n(x) + c2,n(y+2n)) modulo 2n = (c2K,n(x) + c2K,n(y)) modulo 2n 40 2K-Darstellung: Arithmetik Addition - Beweis Rechnung für 2n-1 > x ≥ 0,0 > y ≥ −2n-1, x+y ≥ 0: c2K,n(x)⊕ c2K,n (y) = c2K,n(x+y) = c2,n(x+y) + 2n - 2n = (c2,n(x+y) + 2n) modulo 2n = (c2,n(x) + c2,n(y+2n)) modulo 2n = (c2K,n(x) + c2K,n(y)) modulo 2n 41 2K-Darstellung: Arithmetik Addition - Beweis Rechnung für 0 > x,y ≥ −2n-1, x+y ≥ -2n-1 : c2K,n(x)⊕ c2K,n (y) = c2K,n(x+y) = c2,n(x+y+2n) + 2n - 2n = (c2,n(x+y+2n) + 2n) modulo 2n = (c2,n(x+2n) + c2,n(y+2n)) modulo 2n = (c2K,n(x) + c2K,n(y)) modulo 2n 42 2K-Darstellung: Arithmetik Addition - Bereichsüberlauf Ergebnis im Positiven 2n-1 > x,y ≥ 0, x+y ≥ 2n-1: ((c2K,n(x)+c2K,n(y)) modulo 2n)2K,n = ((c2,n(x)+c2,n(y)) modulo 2n)2K,n = (c2,n(x+y))2K,n = x+y-2n Kein Abbruch, sondern Rückgabe des falschen Ergebnisses (Anschaulich im Zahlenring: Zyklischer Bereichsüberlauf) 43 2K-Darstellung: Arithmetik Addition - Bereichsüberlauf - Beispiel c2K,n(x)⊕ c2K,n (y) := (c2K,n(x) + c2K,n(y)) modulo 2n c2K,4(4)⊕ c2K,4 (5) = (0100 + 0101) modulo 24 = 1001 = c2K,4(4+5-24) = c2K,4(-7) 44 2K-Darstellung: Arithmetik Addition - Bereichsüberlauf Ergebnis im Negativen -2n- 1≤ x,y < 0, x+y < -2n-1: ((c2K,n(x)+c2K,n(y)) modulo 2n)2K,n = ((c2,n(x+2n)+c2,n(y+2n)) modulo 2n)2K,n = (c2,n(x+y+2n))2K,n = x+y+2n Kein Abbruch, sondern Rückgabe des falschen Ergebnisses (Anschaulich im Zahlenring: Zyklischer Bereichsüberlauf) 45 2K-Darstellung: Arithmetik Addition - Bereichsüberlauf - Beispiel c2K,n(x)⊕ c2K,n (y) := (c2K,n(x) + c2K,n(y)) modulo 2n c2K,4(-4)⊕ c2K,4 (-5) = (1100 + 1011) modulo 24 = 0111 = c2K,4(-4-5+24) = c2K,4(7) 46 1- Komplement-Darstellung (1K) Grundidee Wähle k so, dass Komplementbildung und Subtraktion von k leicht realisierbar sind: k = 2n-1 (1-Komplement) Codes für nicht-negative Zahlen 0 x 2n-1 Codes für nicht-positive Zahlen 2n-x 2n-1 47 1K-Darstellung: Definition c1K,n : {-(2n-1-1),...,-0,+0,1,...,2n-1 – 1} → IBn c1K,n(x) := c2,n(x) c1K,n(x) := c2,n(2n - 1 + x) Codes für nicht-negative Zahlen 0 x 2n-1 falls 0 ≤ x < 2n-1 falls -2n-1 < x ≤ 0 Codes für nicht-positive Zahlen 2n-x 2n-1 48 1K-Darstellung: Beispiele c1K,4(7)= c2,4(7)=0111 (0111)1K,4=7 c1K,4(-7)= c2,4(24-1-7)=1000 (1000)1K,4=-7 49 1K-Darstellung: Beispiele für n=4 (komplett) c1K,4(+0) = 0000 c1K,4(-0) = 1111 c1K,4(1) = 0001 c1K,4(-1) = 1110 c1K,4(2) = 0010 c1K,4(-2) = 1101 ... c1K,4(7) ... = 0111 c1K,4(-7) = 1000 50 1K-Darstellung: Dekodierung Für c1K,n(x) = bn-1 ... b1b0 gilt x n-2 = (bn-1 ... b1b0 )1K,n = -bn-1(2n-1-1)+ Σ i = 0 -2n-1+1 2n-2 4 2 1 bn-1 b2 b1 b0 bn-2 bi ⋅ 2i 51 1K-Darstellung: Dekodierung -127 1 64 32 16 8 4 2 1 1 0 0 1 1 0 1 c1K,8(11001101) = 64 + 8 + 4 + 1 - 127 = -50 52 1K-Darstellung: Arithmetik Komplementbildung x∈{1,...,2n-1}, c1K,n(x) = c2,n(x) = bn-1...b1b0 Es gilt: c1K,n(-x) = c2,n(x) = c2,n(2n - 1) - c2,n(x) = (11...11)2,n - (bn-1 ... b1b0 )2,n =((1 - bn-1) ... (1 - b1)(1 - b0))2,n Komplementbildung = „Kippen“ aller Bits 53 1K-Darstellung: Arithmetik Komplementbildung – Beispiele Komplementbildung = „Kippen“ aller Bits c1K,4(7)= c2,4(7)=0111 c1K,4(-7)= 1000 54 1K-Darstellung: Arithmetik Addition (anschaulich): einer positiven Zahl y: y Schritte gegen Uhrzeigersinn. einer negativen Zahl y: y Schritte im Uhrzeigersinn. Subtraktion: Addition des Komplements 55 1K-Darstellung: Arithmetik Addition / Bereichsüberlauf - formal Analog zu 2-Komplement: Betrachte (2n-1) statt 2n c1K,n(x)⊕ c1K,n (y) = (c1K,n(x) + c1K,n(y)) modulo 2n-1 + ist die Addition auf Dualzahlen modulo 2n-1 bedeutet anschaulich: „Addition“ des Überlaufs (führende 1 ignorieren und an letzter Stelle addieren , falls Ergebnis n+1 Stellen hat) 56 1K-Darstellung: Arithmetik Addition - Beispiele c1K,n(x)⊕ c1K,n (y) :=(c1K,n(x) + c1K,n(y)) modulo 2n-1 c1K,4(4)⊕ c1K,4 (3) =(0100 + 0011) modulo 24-1= 0111 c1K,4(4)⊕ c1K,4 (-3)=(0100 + 1100) modulo 24-1= 0001 c1K,4(-4)⊕ c1K,4 (3)=(1011 + 0011) modulo 24-1= 1110 c1K,4(-4)⊕ c1K,4(-3)=(1011 + 1100) modulo 24-1= 1000 57 1K-Darstellung: Arithmetik Addition - Bereichsüberlauf - Beispiel c1K,n(x)⊕ c1K,n (y) :=(c1K,n(x) + c1K,n(y)) modulo 2n-1 c1K,4(4)⊕ c1K,4 (5) = (0100 + 0101) modulo 24-1 = 1001 = c1K,4(4+5-(24-1)) = c1K,4(-6) 58 1K-Darstellung: Arithmetik Addition - Bereichsüberlauf - Beispiel c1K,n(x)⊕ c1K,n (y) :=(c1K,n(x) + c1K,n(y)) modulo 2n-1 c1K,4(-4)⊕ c1K,4 (-5) = (1011 + 1010) modulo 24-1 = 0110 = c1K,4(-4-5+(24-1)) = c1K,4(6) 59 Zahlendarstellung Dezimalzahlen Ziel: Darstellung von Dezimalzahlen als n-Bit-Worte Problem: Nur endlich viele Zahlen exakt darstellbar mit n Bits (Festpunkt oder Gleitpunkt) Unendlich viele Zahlen nur approximativ (gerundet) darstellbar Frage: Welche Zahlen wollen wir exakt darstellen? 60 n-Bit-Festpunktdarstellung (FP) c2,m,k : [0,2k – 2-(m+1)[ → IBn c2,m,k(x) = c2,m+k(rd(x*2m)) rd(y) = zu y nächstgelegende ganze Zahl m k Anzahl Nachkommastellen Anzahl Vorkommastellen (m+k = n) 61 FP-Darstellung: Beispiele Für nicht-negative ganze Zahlen x mit Binärdarstellung x = (bk-1...b0.b-1...b-m)2 gilt c2,m,k(x) = bk-1...b0b-1...b-m Diese Zahlen sind exakt (d.h. ohne Rundungsfehler) darstellbar .. k = n-m m 62 FP-Darstellung: Beispiele Dezimalzahl 1.2 in 8-Bit Festpunktdarstellung mit jeweils 4 Nachkomma- und 4 Vorkommastellen (1) Multiplizieren der Zahl mit 24: 1.2 * 24 = 19.2 (2) Auf- bzw. Abrunden in ganze Zahl: rd(19.2) = 19 (3) Dual-Darstellung mit 8 Bit: c2,4,4(1.2) = c2,8(19) = 00010011 Dekodierung und Rundungsfehler: (00010011)2,4,4 = (1.0011)2 = 1.1875 63 FP-Darstellung: Dekodierung Für c2,m,k(x) = bn-1 ... b1b0 gilt x = (bn-1 ... b1b0)2,m,k = (bn-1...bn-k.bm-1...b0)2 n-1 = Σ bi ⋅ 2i-m i=0 = (bn-1 ... b1b0)2,n / 2m 64 FP-Darstellung: Rundungsfehler Absoluter Fehler: |x-(c2,m,k(x))2,m,k | |x-(c2,m,k(x))2,m,k | = |x-(c2,m+k(rd(x*2m)))2,m+k /2m| = |x-(rd(x*2m))/2m| = |x*2m -(rd(x*2m))|/2m < 0.5/2m = 1/2m+1 (Abstände zwischen exakt darstellbaren Zahlen gleichbleibend) 65 FP-Darstellung: Rundungsfehler Relativer Fehler: |x-(c2,m,k(x))2,m,k|/|x| |x-(c2,m,k(x))2,m,k|/|x| < 1/|x|2m+1 (kann beliebig groß werden für kleine x) 66 FP-Darstellung: Arithmetik Wird auf Rechenoperationen für ganze Zahlen durch Multiplizieren der Zahl mit 2m zurückgeführt 67 FP-Darstellung: Bewertung Gleichbleibender Abstand 1/2m zwischen exakt darstellbaren Zahlen Geeignet für Zahlen ähnlicher Größenordnung (Anzahl der Nachkommastellen m an Größenordnung anpassen, s.d. Rundungsfehler tolerierbar) Problematisch für Rechnungen mit Zahlen unterschiedlicher Größenordnungen: Avogadrozahl: L = 6.0225 ⋅ 1023 Planck – Konstante: h = 6.6260755 ⋅ 10-34 68 n-Bit-Gleitpunktdarstellung (GP) cGP,k,n : [-(2-2-k)*2max,(2-2-k)*2max[ → IBn cGP,k,n(m⋅2e) = 0c2,exp,n-k(e)c2,man,k-1(|m|), falls 0 ≤ m cGP,k,n(m⋅2e) = 1c2,exp,n-k(e)c2,man,k-1(|m|), falls m < 0 c2,exp,n-k(e) 1c2,man,k-1(|m|) = cEx-q,n-k(e) mit q = (2n-k-1-1) = c2,k-1,1(|m|) 1 ≤ |m| < 2 max = 2n-k-1 - 1 n-k k-1 Anzahl der Bits für den Exponenten (Charakteristik) Anzahl der Bits für die Mantisse 69 GP-Darstellung: Reservierte Bitmuster Spezielle Darstellung der 0: Bitmuster 00…00…0 Spezielle Darstellung von +∞: Bitmuster 01…10…0 Spezielle Darstellung von -∞: Bitmuster 11…10…0 NaN (Not a number, z.B. 0/0): Bitmuster x1…1x…x Denormalisierte Zahlen: Bitmuster x0…0x…x V Charakteristik n-2 Betrag der Mantisse k-2 0 70 GP-Darstellung: Beispiele Für Zahlen x mit Gleitpunktdarstellung x = (+/-) (1.bk-2 ... b1b0 )2 * 2(b n-2 ...b k-1 )EX-q,n-k q = 2n-k-1-1 gilt cGP,k,n(x) = (0/1)bn-2...b0 Diese Zahlen sind exakt (d.h. ohne Rundungsfehler) darstellbar V Charakteristik n-2 Betrag der Mantisse k-2 0 71 GP-Darstellung: Beispiele Stelle die Zahl 4.6 dar in V 7 Charakteristik 6 Betrag der Mantisse 4 3 0 3-Bit Charakteristik (q=3): Exponent zwischen –2 (Bitmuster 001) und 3 (Bitmuster 110) 4-Bit Mantisse: Werte zwischen 1 (Bitmuster 0000) und 2-2-4 (Bitmuster 1111) 72 GP-Darstellung: Beispiele Stelle die Zahl 4.6 dar in V 7 Charakteristik 6 Betrag der Mantisse 4 3 0 (1) Normierte Gleitpunktdarstellung (m und e bestimmen): 4.6 = 2.3 * 21 = 1.15 * 22 Ergebnis: |m| = 1.15 und e = 2 73 GP-Darstellung: Beispiele Stelle die Zahl 4.6 dar 0 7 Charakteristik 6 Betrag der Mantisse 4 3 0 (2) Vorzeichen bestimmen: 0 für positive Zahl 74 GP-Darstellung: Beispiele Stelle die Zahl 4.6 dar 0 7 1 6 0 1 Betrag der Mantisse 4 3 0 (3) Charakteristik bestimmen: c2,exp,3(2) = cEX-3,3(2) = c2,3(2+3) = 101 75 GP-Darstellung: Beispiele Stelle die Zahl 4.6 dar 0 7 1 6 0 1 0 4 3 0 1 0 0 (4) Code der Mantisse bestimmen: c2,4,1(1.15) = c2,5(rd(1.15*24)) = c2,5(18) = 10010 Ergebnis: c2,man,4(1.15)=0010 76 GP-Darstellung: Beispiele Stelle die Zahl 4.6 dar 0 7 1 6 0 1 0 4 0 1 3 0 0 Dekodierung und Rundungsfehler: (01010010)GP,5,8 = (1.0010)2*2(101) EX-3,3 = (100.1)2 = 4.5 77 GP-Darstellung: Dekodierung Für cGP,k,n(x) = bn-1 ... b1b0 gilt x = (bn-1 ... b1b0)GP,k,n = (+/-) (1.bk-2 ... b1b0 )2 * 2(b n-2 ...b k-1 ) EX-q,n-k mit bn-1=(0/1) und q = 2n-k-1-1 V Charakteristik n-2 Betrag der Mantisse k-2 0 78 GP-Darstellung: Weitere Beispiele Kleinste positive darstellbare normalisierte Zahl: V 7 Charakteristik 6 Betrag der Mantisse 4 3 0 Kleinster Exponent (Bitmuster 0…0 schon vergeben): (001)2,exp,3 = (001)Ex-3,3 = (001)2,3 - 3 = 1-3 = -2 Kleinste Mantisse: (0000)2,man,4 = (10000)2,4,1 = (1.0000)2 Ergebnis: (00010000)GP,4,8 = (1.0000)2*2-2 = (0.01)2 = 0.25 79 GP-Darstellung: Weitere Beispiele Größte positive darstellbare normalisierte Zahl: V 7 Charakteristik 6 Betrag der Mantisse 4 3 0 Größter Exponent (Bitmuster 1…1 schon vergeben): (110)2,exp,3 = (110)EX-3,3 = (110)2,3 -3 = 6-3 = 3 Größte Mantisse: (1111)2,man,4 = (11111)2,4,1 = (1.1111)2 Ergebnis: (01101111)GP,4,8 = (1.1111)2*23 = (1111.1)2 = 15.5 80 GP-Darstellung: Standards IEEE-Standard 754 - einfache Genauigkeit (Datentyp float): [IEEE: Institute of Electrical and Electronics Engineers] V Charakteristik 31 30 23 Betrag der Mantisse 22 0 8-Bit Charakteristik (q = 127): Exponent zwischen –126 (Bitmuster 0...01) und 127 (Bitmuster 1...10) (23 + 1)-Bit Mantisse: Werte zwischen 1 (Bitmuster 0...0) und 2-2-23 (Bitmuster 1...1) 81 GP-Darstellung: Standards IEEE-Standard 754 - Doppelte Genauigkeit (Datentyp double): V Charakteristik 63 62 52 Betrag der Mantisse 51 0 11-Bit Charakteristik (q = 1023): Exponent zwischen –1022 (Bitmuster 0...01) und 1023 (Bitmuster 1...10) (52 + 1)-Bit Mantisse: Werte zwischen 1 (Bitmuster 0...0) und 2-2-52 (Bitmuster 1...1) 82 GP-Darstellung: Standards IEEE-Standard 754 - Erweiterte Genauigkeit: V Charakteristik 79 78 64 Betrag der Mantisse 63 0 15-Bit Charakteristik: Exponent zwischen –(2-14-2) (Bitmuster 0...01) und (214-1) (Bitmuster 1...10) (64 + 1)-Bit Mantisse: Werte zwischen 1 (Bitmuster 0...0) und 2-2-64 (Bitmuster 1...1) 83 GP-Darstellung: Rundungsfehler Absoluter Fehler: |m⋅2e-(cGP,k,n(m⋅2e))GP,k,n| |m⋅2e-(cGP,k,n(m⋅2e)) GP,k,n | = |m-(c2,k-1,1(m))2,k-1,1|⋅2e < 2e/2k Kann sehr groß werden für große Zahlen: –(2n-k-1-1)≤ e≤ 2n-k-1 - Einfache Genauigkeit: auf 6 Vor- + Nachkommastellen e=0: 23 Binärnachkommastellen ~ 6 Dezimalstellen e>0: Genauigkeitsverlust bei Nachkommastellen = Anzahl Vorkommastellen 84 GP-Darstellung: Rundungsfehler Relativer Fehler: |m⋅2e-(cGP,k,n(m⋅2e))GP,k,n|/|m⋅2e| |m⋅2e-(cGP,k,n(m⋅2e))GP,k,n|/|m⋅2e| < 2e/|m⋅2e|2k < 2e/2e2k < 1/2k Gleichbleibend für alle Zahlen: - Einfache Genauigkeit: 2-24 - Doppelte Genauigkeit: 2-53 - Erweitere Genauigkeit: 2-65 85 GP-Darstellung: Arithmetik Wie Arithmetik normierter Gleitpunktzahlen: Addition/Subtraktion: - Exponentenangleich = Kommaverschiebung bei Mantisse - Mantissen addieren/subtrahieren - Neu normieren = Kommaverschiebung bei Mantisse 86 GP-Darstellung: Arithmetik Wie Arithmetik normierter Gleitpunktzahlen: Multiplikation/Division: - Exponenten addieren/subtrahieren: Auf Exzeß-q-Darstellung - Mantissen multiplizieren/dividieren - Neu normieren Ausnahmefälle: Bereichsüberlauf oder -unterschreitung bei Darstellung des Exponenten („overflow“/“underflow“, z.B. bei Multiplikation sehr großer/kleiner Zahlen ) 87 GP-Darstellung: Arithmetik Große Rundungsfehler möglich: durch Exponentenangleich bei Addition sehr unterschiedlich großer Zahlen und Stellenauslöschung bei Subtraktion gleich großer Zahlen: (1.0*2-9 + 1.0*223)-223 = (2-32+1.0)*223-223 = 0 2-9+(1.0*223 - 1.0*223) = 2-9+(1.0-1.0)*223 = 2-9 223*((2-9+223)-223)=0 223*(2-9+(223-223))=214 88 GP-Darstellung: Arithmetik Ergebnisse von Gleitpunktberechnungen können u.U. erheblich von dem exakten Wert abweichen! Auswege: Exakte Arithmetik (z.B. Intervallarithmetik: nicht durch Hardware realisiert, aber Software erhältlich) Rechnungen geeignet organisieren (Gruppierung von Zahlen nach Größenbereichen) Übliche Rechengesetze gelten i.A. nicht (Assoziativ-/Distributiv/Kommutativgesetz, siehe obiges Beispiel) 89 GP-Darstellung: Arithmetik Sonderrolle der 0: Keine nGP-Darstellung arithmetische Sonderbehandlung (siehe IEEE-Standard) exaktes Ergebnis 0 wird in der Regel nicht angenommen bei Abfragen: nicht „r = 0“, sondern „|r| < ε “ überprüfen nicht „x = y“, sondern „|x - y| < ε“ überprüfen 90 Zeichendarstellungen: Grundidee Schritt 1: Verwende Code-Tabelle zur Übersetzung von Zeichen in Zahlen (ASCII, Unicode) Schritt 2: Codiere alle Zahlen in 0en und 1en (binäres Zahlensystem) 91 Zeichendarstellungen: ASCII American Standard Code for Information Interchange Gebräuchlichste Code-Tabelle für Computer Alle wichtigen Zeichen der englischen Sprache von 0 bis 127 nummeriert (dargestellt durch Bits 2 bis 8) Darunter: Auch „nicht druckbare“ Zeichen mit ausschließlich formatierender Wirkung (z.B. Tabulatorzeichen, siehe auch CVorlesung) 92 Zeichendarstellungen: ASCII Das erste Bit verwendete man früher als Kontrollbit für die Datenübertragung: - Auf 0 oder 1 gesetzt, je nachdem ob die Anzahl der 1-en an den übrigen 7 Bitpositionen gerade (even) oder ungerade (odd) ist - Ergebnis: Gesamtanzahl der 1-en immer gerade (even parity). - Folgerung: Erkenne, wenn bei Übertragung ein Bit verfälscht wurde 93 Zeichendarstellungen: ASCII Heute wird ASCII zur Speicherung verwendet, Datenübertragung ist verbessert - Kein Kontrollbit mehr - ASCII um 128 Zeichen erweitert es existieren mehrere unterschiedliche Erweiterungen: deutsche Umlaute, Sonderzeichen anderer Sprachen, … 94 Zeichendarstellungen: ASCII Beispiele: Zeichen … 0 … 9 … A B … a b … dezimal … 48 … 57 … 65 66 … 97 98 … binär … 0110000 … 0111001 … 1000001 1000010 … 1100001 1100010 … (Groß- und Kleinbuchstaben in alphabetischer Reihenfolge) 95 Zeichendarstellungen: UNICODE 256 Zeichen reichen nicht für alle Sprachen aus Mit Unicode kann man alle jemals von Menschen verwendeten Schriftzeichen speichern MS-Office 2000, OpenOffice und jedes andere moderne Programm erkennt automatisch, ob ein Text im alten ASCII-Code oder im neuen Unicode gespeichert ist 96 Zeichendarstellungen: UNICODE Zeichen codiert gemäß UCS (Universal Character Set): Zeichen 0 – 127: wie ASCII Zeichen 128 – 255: wie Latin-1-Erweiterung von ASCII verwendet 32 Bits mit führenden 0en UCS-Code eingebettet in syntaktisches Format mit Kontrollbits: UTF: Unicode-Transformation-Format Erkennen von Zeichengrenzen, Korrektheitstest 97 Zeichendarstellungen: UNICODE Verschiedene Versionen: UTF-32, UTF-16, UTF-8 können alle den kompletten Zeichensatz darstellen sind verlustfrei in jeweils andere Darstellung transformierbar UTF-32: fixe Länge für alle Zeichen (32 Bit) UTF-16,UTF-8: unterschiedliche Längen für verschiedene Zeichen (führende 0en zum Teil weglassen) UTF-8: am weitesten verbreitete Darstellung, Quasi-Standard 98 Zeichendarstellungen: UTF-8 7-Bit ASCII-Zeichen: - werden mit einem Byte kodiert - Form: 0<ASCII-Code> andere: - verwenden zwischen 2 und 4 Bytes - Code beginnt mit 1 n-Byte-Zeichen: - Erstes Byte beginnt mit n 1-en mit einer anschließenden 0 - Jedes Folgebyte beginnt mit 10 - Übrige Bits: Kodierung eines Unicode-Zeichens mit UCS 99 Zeichendarstellungen: UTF-8 Wird von Java unterstützt, aber im allgemeinen nicht von höheren Programmiersprachen (auch nicht von C) 1-Byte-Codes: 0xxx xxxx 2-Byte-Codes: 110x xxxx 10xx xxxx 3-Byte-Codes: 1110 xxxx 10xx xxxx 10xx xxxx 4-Byte-Codes: 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx 100 Zusammenfassung Daten werden über dem Alphabet {0,1} codiert mit endlich vielen Bits Wir haben verschiedene Codierungen für unterschiedliche Datentypen kennengelernt In den verschiedenen Codierungen können identische Codeworte vorkommen Wie ein Codewort interpretiert wird, hängt von der Codierung (also dem Datentyp) ab! Welche und wieviele Werte codiert werden (können), hängt von der Anzahl der verwendeten Bits ab 101