Vorlesung Informatik I Universität Augsburg Wintersemester 2010/2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 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 codiert werden (zusammenhängender Bereich, ganze/gebrochene/reelle Zahlen?) Wie codiert man negative Zahlen? Mit welcher Genauigkeit (Rundungsfehler) codiert man gebrochene 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 Zahlendarstellungen Notationen Jedes Wort über dem Alphabet {0,1} bezeichnen wir als Bitmuster Ab jetzt benutzen wir ausschließlich n-Bit-Codierungen. Die Bezeichnung einer Codierung ist immer von der Form c<Name>,n <Name> n ist eine Abkürzung für den Namen der Codierung ist die Anzahl der verwendeten Bit c<Name>,n(x) bezeichnet also das zu der Zahl x gehörende Bitmuster bzgl. der Codierung c<Name>,n 6 Zahlendarstellungen Notationen Wir benutzen also Bitmuster als Codewörter für Zahlen. Ein gegebenes Bitmuster kann aber für verschiedene Zahlen stehen, je nachdem, welche Codierung man verwendet hat. Durch die Notation (<Bitmuster>)<Name>,n geben wir an, dass wir <Bitmuster> als Codewort bzgl. der Codierung c<Name>,n auffassen (<Bitmuster>)<Name>,n bezeichnet die Zahl, für die c<Name>,n((<Bitmuster>)<Name>,n)=<Bitmuster> gilt 7 Zahlendarstellung ganzer Zahlen Vorbereitungen Für x ∈ {0, ..., 2n - 1} bezeichnen wir mit c2,n(x) die Dualdarstellung von x in n Stellen, evtl. aufgefüllt mit führenden Nullen Eignet sich noch nicht für die Darstellung negativer Zahlen Bei Addition / Subtraktion / Multiplikation kann der darstellbare Zahlenbereich über-/unterschritten werden - was dann? Beispiele: c2,8(7)=00000111 (00000111)2,8=7 8 Zahlendarstellung ganzer Zahlen Grundidee 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) 9 Vorzeichen-Betrag-Darstellung Definition AVB,n = {-(2n-1-1),...,-0,+0,1,...,2n-1 - 1} cVB,n : AVB,n → 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 10 Vorzeichen-Betrag-Darstellung Beispiele cVB,8(7)= 0c2,7(7)=00000111 (00000111)VB,8=7 cVB,4(-7)= 1c2,3(7)=1111 (1111)VB,4=-7 11 Vorzeichen-Betrag-Darstellung Berechnung Für cVB,n(x) = bn-1 ... b1b0 gilt n-2 x=(bn-1 ... b1b0)VB,n=(+/-) Σ i = 0 bi 2i für bn-1 = (0/1) 12 Vorzeichen-Betrag-Darstellung Arithmetik Arithmetik der Vorzeichen-Betrag-Darstellung: Sehr aufwendig! (selbst überlegen: z.B. postive Zahl + negative Zahl = ? Fallunterscheidung nötig) Wird in der Praxis nicht verwendet 13 Exzeß-q-Darstellung Definition AEx-q,n={-q,...,0,1,...,2n–1–q} für q ganze nicht-negative Zahl cEX-q,n : AEx-q,n → IBn cEx-q,n(x) := c2,n(x+q) 14 Exzeß-q-Darstellung Beispiele: cEx-32,8(7)= c2,8(39)=00100111 (00100111)Ex-32,8=7 cEx-8,4(-7)= c2,4(1)=0001 (0001)Ex-8,4=-7 15 Exzeß-q-Darstellung Berechnung Für cEx-q,n(x) =bn-1 ... b1b0 gilt n-1 x = (bn-1 ... b1b0 )Ex-q,n = Σ i = 0 bi ⋅ 2i – q 16 Exzeß-q-Darstellung Arithmetik Sei + die Addition, - die Subtraktion auf Dualzahlen 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) (x, y) + c c (c(x),c(y)) x + y ⊕ c(x + y) = c(x) ⊕ c(y) =cEx-q,n(x)+cEx-q,n(y)–c2,n(q) Beispiel: cEx-32,8(7)⊕cEx-32,8(-7)=00100111+00011001-00100000=00100000 17 Exzeß-q-Darstellung Arithmetik Sei + die Addition, - die Subtraktion auf Dualzahlen 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) (x, y) - c c (c(x),c(y)) x - y Θ c(x - y) = c(x) Θ c(y) =cEx-q,n(x)-cEx-q,n(y)+c2,n(q) Beispiel: cEx-32,8(7) Θ cEx-32,8(-7)=00100111-00011001+00100000=00101110 18 Exzeß-q-Darstellung Arithmetik Bei Bereichsüberlauf (also bei x+y > 2n–1–q oder <-q) brechen C-Programme mit Fehlermeldung ab Multiplikation/Division: zu kompliziert! Wird zur Darstellung des Exponenten bei Gleitpunktdarstellungen verwendet (bemerke: da braucht man nur Addition / Subtraktion) 19 1- und 2-Komplement-Darstellung 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 20 1- und 2-Komplement-Darstellung 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) 21 1- und 2-Komplement-Darstellung Grundidee Wähle k so, dass Komplementbildung und Subtraktion von k leicht realisierbar sind: k = 2n (2-Komplement) k = 2n-1 (1-Komplement) 0 x k/2 k-x k 22 2-Komplement-Darstellung Definition A2K,n = {-2n-1,...,0,1,...,2n-1 – 1} c2K,n : A2K,n → IBn c2K,n(x) := c2,n(x) falls 0 ≤ x < 2n-1 c2K,n(x) := c2,n(2n + x) falls -2n-1 ≤ x < 0 0 x 2n-1 2n-x 2n 23 2-Komplement-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 24 2-Komplement-Darstellung Beispiel 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 25 2-Komplement-Darstellung Berechnung Für c2K,n(x) = bn-1 ... b1b0 gilt n-2 x = (bn-1 ... b1b0 )2K,n = -bn-12n-1 + Σ i = 0 bi ⋅ 2i (Rechnung?) 26 2-Komplement-Darstellung Arithmetik Komplementbildung Sei x∈{1,...,2n-1 - 1}, c2K,n(x)=c2,n(x)=bn-1...b1b0 Dann gilt: c2K,n(-x) = c2,n(x) =c2,n(2n - 1) -c2,n(x) =(11...11)2,n -(bn-1 ... b1b0 )2,n + c2,n(1) + (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 27 2-Komplement-Darstellung Arithmetik (anschaulich) Addition: einer positiven Zahl y: y Schritte gegen Uhrzeigersinn. einer negativen Zahl y: y Schritte im Uhrzeigersinn. Subtraktion: durch Addition des Komplements Multiplikation / Division: Zurückführung auf Addition 28 2-Komplement-Darstellung Arithmetik (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) 29 2-Komplement-Darstellung Arithmetik (formal) 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 30 2-Komplement-Darstellung Arithmetik (formal) 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 31 2-Komplement-Darstellung Arithmetik (formal) 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 32 2-Komplement-Darstellung Arithmetik (formal) 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 33 2-Komplement-Darstellung Arithmetik (formal) Ergebnis bei Bereichsüberlauf 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) 34 2-Komplement-Darstellung Arithmetik (formal) Ergebnis bei Bereichsüberlauf -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) 35 1-Komplement-Darstellung Definition A2K,n = {-(2n-1-1),...,-0,+0,1,...,2n-1 – 1} c1K,n : A1K,n → IBn c1K,n(x) := c2,n(x) c1K,n(x) := c2,n(2n -1 + x) 0 x 2n-1-1 falls 0 ≤ x < 2n-1 falls -2n-1 < x ≤ 0 2n-1-x 2n-1 36 1-Komplement-Darstellung Beispiele: c1K,4(7)= c1,4(7)=0111 (0111)1K,4=7 c1K,4(-7)= c1,4(24-1-7)=1000 (1000)1K,4=-7 37 1-Komplement-Darstellung Beispiel 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 38 1-Komplement-Darstellung Berechnung Für c1K,n(x) = bn-1 ... b1b0 gilt x n-2 = (bn-1 ... b1b0 )1K,n = -bn-1(2n-1-1)+ Σ i = 0 bi ⋅ 2i (Rechnung?) 39 1-Komplement-Darstellung Arithmetik Komplementbildung Sei x∈{1,...,2n-1}, c1K,n(x)=c2,n(x)=bn-1...b1b0 Dann 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 40 1-Komplement-Darstellung Arithmetik (anschaulich) Addition: einer positiven Zahl y: y Schritte gegen Uhrzeigersinn. einer negativen Zahl y: y Schritte im Uhrzeigersinn. Subtraktion: durch Addition des Komplements Multiplikation / Division: Zurückführung auf Addition 41 1-Komplement-Darstellung Arithmetik (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) 42 Zahlendarstellung reeller Zahlen Ziel: Darstellung rationaler und reeller Zahlen 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? 43 Festpunktdarstellung mit n Bits Definition: Seien m (Anzahl Nachkommastellen) und k (Anzahl Vorkommastellen) nichtnegative ganze Zahlen fest gegeben Hat eine nicht-negative ganze Zahl x die Summendarstellung x = (bk-1...b0.b-1...b-m)2 heißt c2,m,k(x) = bk-1...b0b-1...b-m = c2,m+k(x*2m) 2-adische Festpunktdarstellung von x mit k Vorkomma- und m Nachkommastellen und x heißt exakt darstellbar 44 Festpunktdarstellung mit n Bits Definition: .. k = n-m m Sind die Nachkommastellen einer Zahl x nicht exakt darstellbar, so rundet man zur nächstgelegenen exakt darstellbaren Zahl: Mit rd bezeichnen wir den Rundungsoperator, der eine Zahl x zur nächstgelegenen ganzen Zahl rundet. Er erfüllt also |rd(x)-x|=min{|y-x| | y ist eine ganze Zahl} 45 Festpunktdarstellung mit n Bits Definition: .. k = n-m m Wir definieren für beliebiges x: c2,m,k(x):= c2,m+k(rd(x*2m)) So können wir also bei der Berechnung vorgehen: (1) Multiplizieren der Zahl mit 2m (2) Auf- bzw. Abrunden in eine ganze Zahl (3) Dual-Darstellung mit n Bit 46 Festpunktdarstellung mit n Bits Beispiel: Stelle Dezimalzahl 1.2 in folgender 8-Bit Festpunktdarstellung bzgl. der Basis 2 dar: .. 4 4 Multiplizieren der Zahl mit 24: 1.2 * 24 = 19.2 Auf- bzw. Abrunden in ganze Zahl: rd(19.2)=19 Dual-Darstellung mit 8 Bit: c2,4,4(1.2)= c2,8(rd(1.2* 24))=c2,8(19)=00010011 (00010011)2,4,4=(00010011)2,8/ 24 =1.1875 47 Festpunktdarstellung mit n Bits Berechnung Für c2,m,k(x) = bn-1 ... b1b0 gilt x = (bn-1 ... b1b0 )2,m,k n-1 = Σ i=0 bi ⋅ 2i-m = (bn-1 ... b1b0)2,m+k/2m 48 Festpunktdarstellung mit n Bits Absoluter Rundungsfehler: |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) 49 Festpunktdarstellung mit n Bits Relativer Rundungsfehler: |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) 50 Festpunktdarstellung mit n Bits Arithmetik: .. k=n-m m Zurückführen auf Rechenoperationen für ganze Zahlen durch Multiplizieren der Zahl mit 2m 51 Festpunktdarstellung mit n Bits Eigenschaften: .. k = n-m m 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) 52 Festpunktdarstellung mit n Bits Eigenschaften: .. k = n-m m Problem: Unterschiedliche Größenordnungen in Anwendungen: Avogadrozahl: Planck – Konstante: L = 6.0225 ⋅ 1023 h = 6.6260755 ⋅ 10-34 Besser: Darstellung als Gleitpunktzahl mit n Bits 53 Gleitpunktdarstellung mit n Bits Darstellung normierter Gleitpunktzahlen zur Basis 2 in n-Bits: Jede reelle Zahl r besitzt eine eindeutige Darstellung der Form (siehe Kapitel zu Zahlensystemen): r = m ⋅ 2e mit 1 ≤ |m| < 2 Idee: Codiere (m, e) in geeigneter Weise als n-Bit-Zahl: k Bits für die Darstellung von m (Festpunktdarstellung) n - k Bits für e (Exzeß-q-Darstellung) (0 < k < n) 54 Gleitpunktdarstellung mit n Bits Definition V Charakteristik n-2 Betrag der Mantisse k-2 0 V = Vorzeichen der Mantisse =0 für positive Zahlen =1 für negative Zahlen 55 Gleitpunktdarstellung mit n Bits Definition V Charakteristik n-2 Betrag der Mantisse k-2 0 Darstellung der Mantisse (k-1 Bits): Festpunktdarstellung mit (1) einer Vorkommastelle (muss nicht dargestellt werden, da immer =1) (2) k-1 Nachkommastellen Für c2,k-1,1(|m|) = 1b-1b-2... b-k-2 definieren wir: c2,man,k-1(|m|) := b-1b-2... b-k-2 56 Gleitpunktdarstellung mit n Bits Definition V Charakteristik n-2 Betrag der Mantisse k-2 0 Darstellung des Exponenten = Charakteristik (n-k Bits): Exzeß-(2n-k-1-1)-Darstellung c2,exp,n-k(e) := cEX-q,n-k(e) mit q=(2n-k-1-1) (Exponenten zwischen –(2n-k-1-1) und 2n-k-1 darstellbar) 57 Gleitpunktdarstellung mit n Bits Definition V Charakteristik n-2 Betrag der Mantisse k-2 0 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 Diese Bitmuster (und weitere) stehen dabei nicht zur Verfügung: Spezielle Darstellung der 0: Bitmuster 00…00…0 Spezielle Darstellung von +∞: Bitmuster 01…10…0 Spezielle Darstellung von -∞: Bitmuster 11…10…0 58 Gleitpunktdarstellung mit n Bits Beispiel: V 7 Charakteristik 6 Betrag der Mantisse 4 3 0 3-Bit Charakteristik: q=3, Exponent zwischen –3 (Bitmuster 000) und 4 (Bitmuster 111) 4-Bit Mantisse: Werte zwischen 1 (Bitmuster 0000) und 2-2-5 (Bitmuster 1111) 59 Gleitpunktdarstellung mit n Bits Beispiel: Stelle die Zahl 4.6 dar 0 7 1 6 0 1 0 4 3 0 1 0 0 (1) Normierte Gleitpunktdarstellung (m und e bestimmen): 4.6 = 2.3*21 = 1.15*22 Ergebnis: |m| = 1.15 und e=2 60 Gleitpunktdarstellung mit n Bits Beispiel: Stelle die Zahl 4.6 dar 0 7 1 0 6 1 0 4 3 0 1 0 0 (2) Vorzeichen bestimmen: 0 für positive Zahl 61 Gleitpunktdarstellung mit n Bits Beispiel: Stelle die Zahl 4.6 dar 0 7 1 6 0 1 0 4 0 1 3 0 0 (3) Charakteristik bestimmen: c2,exp,3(2)= cEX-3,3(2)= c2,3(2+3)=101 62 Gleitpunktdarstellung mit n Bits Beispiel: Stelle die Zahl 4.6 dar 0 7 1 6 0 1 0 4 0 1 0 3 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 63 Gleitpunktdarstellung mit n Bits Beispiel: Stelle die Zahl 4.6 dar 0 7 1 6 0 1 0 4 0 1 3 0 0 Also: cGP,4,8(4.6)=01010010 Umgekehrt: (01010010)GP,k,8 = (1.0010)2*2(101) EX-3,3 =(100.1)2=4.25 64 Gleitpunktdarstellung mit n Bits Berechnung: V Charakteristik n-2 Betrag der Mantisse k-2 0 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 für bn-1=(0/1) und q=2n-k-1-1 65 Gleitpunktdarstellung mit n Bits Beispiele: V 7 Charakteristik 6 Betrag der Mantisse 4 3 0 Kleinste positive darstellbare Zahl: Kleinster Exponent: (000)2,exp,3 = (000)EX-3,3 = (000)2,3 -3 = 0-3 = -3 Kleinste Mantisse (Bitmuster 0…0 schon vergeben): (0001)2,man,4 = (10001)2,4,1 = (1.0001)2 Ergebnis: (00000001)GP,4,8 = (1.0001)2*2-3 = (0.0010001)2 66 Gleitpunktdarstellung mit n Bits Beispiel: V 7 Charakteristik 6 Betrag der Mantisse 4 3 0 Größte positive darstellbare Zahl: Größter Exponent: (111)2,exp,3 = (111)EX-3,3 = (111)2,3 -3 = 7-3 = 4 Größte Mantisse (Bitmuster 1…1 schon vergeben): (1110)2,man,4 = (11110)2,4,1 = (1.1110)2 Ergebnis: (01111110)GP,4,8 = (1.1110)2*24 = (11110)2 = 30 67 Gleitpunktdarstellung mit n Bits Beispiele: IEEE-Standard 754 Einfache Genauigkeit: V Charakteristik 31 30 23 Betrag der Mantisse 22 0 8-Bit Charakteristik: Exponent zwischen –127 (Bitmuster 0...0) und 128 (Bitmuster 1...1) (23 + 1)-Bit Mantisse: Werte zwischen 1 (Bitmuster 0...0) und 2-2-24 (Bitmuster 1...1) 68 Gleitpunktdarstellung mit n Bits Beispiele: IEEE-Standard 754 Doppelte Genauigkeit: V Charakteristik 63 62 52 Betrag der Mantisse 51 0 11-Bit Charakteristik: Exponent zwischen –1023 (Bitmuster 0...0) und 1024 (Bitmuster 1...1) (52 + 1)-Bit Mantisse: Werte zwischen 1 (Bitmuster 0...0) und 2-2-53 (Bitmuster 1...1) 69 Gleitpunktdarstellung mit n Bits Beispiele: IEEE-Standard 754 Erweiterte Genauigkeit: V Charakteristik 79 78 64 Betrag der Mantisse 63 0 15-Bit Charakteristik: Exponent zwischen –(2-14-1) (Bitmuster 0...0) und 214 (Bitmuster 1...1) (64 + 1)-Bit Mantisse: Werte zwischen 1 (Bitmuster 0...0) und 2-2-65 (Bitmuster 1...1) 70 Festpunktdarstellung mit n Bits Absoluter Rundungsfehler: |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) 71 Festpunktdarstellung mit n Bits Relativer Rundungsfehler: |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) 72 Gleitpunktdarstellung mit n Bits Arithmetik: V Charakteristik n-2 Betrag der Mantisse k-2 0 Wie Arithmetik normierter Gleitpunktzahlen: Addition/Subtraktion: Exponentenangleich - Mantissen addieren/subtrahieren - neu normieren Multiplikation/Division: Exponenten addieren/subtrahieren - Mantissen mult./div. - neu normieren mit Ausnahmefällen: Bereichsüberlauf oder -unterschreitung bei Darstellung des Exponenten („overflow“/“underflow“); z.B. bei Multiplikation sehr großer/kleiner Zahlen 73 Gleitpunktdarstellung mit n Bits Arithmetik: V Charakteristik n-2 Betrag der Mantisse k-2 0 Große Rundungsfehler möglich: durch Exponentenangleich bei Addition sehr unterschiedlich großer Zahlen ((2-9+223)-223=0,2-9+(223-223)=2-9) durch Stellenauslöschung bei Subtraktion gleich großer Zahlen (1023((10-9+1)- 1)=0, 1023(10-9+(1-1))=1014) 74 Gleitpunktdarstellung mit n Bits 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) 75 Gleitpunktdarstellung mit n Bits 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| < ε “ nicht „x == y“, sondern „|x - y| < ε“ 76 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) 77 Zeichendarstellungen ASCII - Tabelle: 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) 78 Zeichendarstellungen ASCII - Tabelle: 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 Später: ASCII zur Speicherung, verbesserte Datenübertragung Kein Kontrollbit mehr, ASCII um 128 Zeichen erweitert (es existieren mehrere unterschiedliche Erweiterungen deutsche Umlaute, Sonderzeichen anderer Sprachen, …) 79 Zeichendarstellungen ASCII – Tabelle, 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) 80 Zeichendarstellungen Unicode – Tabelle: 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 81 Zeichendarstellungen Unicode – Tabelle: 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 82 Zeichendarstellungen Unicode – Tabelle: 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 83 Zeichendarstellungen Unicode – Tabelle, Beispiel UTF-8 : 7-Bit ASCII-Zeichen: werden mit einem Byte kodiert, in der 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 (weglassen überschüssiger führender 0en) 84 Zeichendarstellungen Unicode – Tabelle, Beispiel 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 85 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 86