06_Zahlendarstellungen_1711-22112010

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