c Codierung - Institut für Informatik

Werbung
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
Herunterladen