Vorlesung „Programmieren“ Agenda Dezimalsystem

Werbung
25.10.2012
Vorlesung „Programmieren“
Zahlendarstellung
Dr. Dennis Pfisterer
Institut für Telematik, Universität zu Lübeck
http://www.itm.uni-luebeck.de/people/pfisterer
Agenda
• Zahlendarstellung
• Oder: wie rechnen Computer?
Security - 04 Cryptology
#2
Dezimalsystem
• Normal rechnen wir im Dezimalsystem
0+1= 1
1+1= 2
– Basis 10
2+1= 3
• 10 verschiedene „Symbole“ (0 bis 9) zur
Zahlendarstellung vorhanden
3+1= 4
4+1= 5
5+1= 6
6+1= 7
• Größere Zahlen werden durch Sequenz
von Symbolen gebildet
7+1= 8
8+1= 9
9 + 1 = 10
– „Stelle“ bestimmt Wertigkeit des Symbols
Security - 04 Cryptology
#3
1
25.10.2012
Dezimalsystem
1 100 1 ·100
• Darstellung von Zahlen in
Summenform möglich
10 101 1 ·101
100 102 1 ·102
1.000 103 1 ·103
10.000 104 1 ·104
100.000 105 1 ·105
• Beispiele
– 20
– 1024
= 2 ·101 + 0 ·100
= 1 ·103 + 0 ·102 + 2 ·101 + 4 ·100
Security - 04 Cryptology
#4
Generalisierung: Andere Basen
• Wir verwenden (normalerweise) das Dezimalsystem
– Sehr einfach, damit (als Mensch) zu rechnen
• Man kann jedoch auch Zahlensysteme mit beliebigen
anderen Basen verwenden
– z.B. zur Basis b = 2, 3, 8, 16 oder 34
• Unterscheidung von Zahlen verschiedener Basen
– Optional: tiefgestellte Angabe der Basis
– 12 zur Basis 10: 1210
– 12 zur Basis 16: 1216
Security - 04 Cryptology
#5
Generalisierung: Andere Basen
• Man benötigt b verschiedene Symbole zur
Darstellung
• Beispiel: b = 11
– Symbole: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A
– Rechnen: 0+0 = 0, 9+1 = A oder 9+2 = 10
– Symbole: A, B, C, D, E, F, G, H, I, J, K
– Rechnen: A+A = A, J+B=K oder J+C = BA
Security - 04 Cryptology
#6
2
25.10.2012
Wichtiges Zahlensystem: Binärsystem
• Um die technische Realisierung
möglichst einfach zu halten, arbeitet
ein moderner Rechner binär
– Binär: Zwei Zustände
• Mögliche Symbole
–
–
–
–
An, aus
Strom, kein Strom
0, 1
A, B
Security - 04 Cryptology
#7
Binärsystem
• Symbole: 0 und 1
Basis 2
– Eine Binärziffer heißt „Bit“
(binary digit)
– Folge von 8 Bit heißt „Byte“
• Rechnen
– 0+0=0
– 1+0=0
– 1 + 1 = 10
Basis 2
Basis 10
0+1 =
1
1
1+1 =
10
2
10 + 1 =
11
3
11 + 1 =
100
4
100 + 1 =
101
5
101 + 1 =
110
6
110 + 1 =
111
7
111 + 1 =
1000
8
1000 + 1 =
1001
9
1001 + 1 =
1010
10
Security - 04 Cryptology
Binärsystem und Computer
#8
Arbeitsspeicher
• Computer besitzen Arbeitsspeicher
1
0
0
0
1
1
0
1
0
1
1
0
1
1
1
0
1
0
0
0
1
1
0
1
1
1
1
1
1
1
1
1
.....
0
0
0
0
0
0
0
1
0003
0
0
1
1
1
0
1
0
0002
0
1
0
1
0
1
0
0
0001
0
0
0
0
1
0
1
0
– Besteht aus Menge von 1-Bit Speichern
– Jeweils Gruppe von 8 speichert ein Byte
• Jedes Byte ist unter einer bestimmten
Adresse erreichbar
– Jedes Byte kann individuell gelesen und
geschrieben werden
– Bit-weiser Zugriff nicht möglich
• Beispiel (Pseudocode)
– setze_adresse[3] = 5810
– gebe_aus_adresse[3] 5810
Security - 04 Cryptology
#9
3
25.10.2012
Darstellung von Zahlen im Binärsystem
• Analog zum Dezimalsystem
Basis 2 Basis 10
100
10 21
101
100 22
1010
1000 23
1011
10000 24
10100
100000 25
10101
• Beispiel
– 1012
– Basis 10: 1 · 22 + 0 · 21 + 1 · 20
– Basis 2: 1 · 1010 + 0 · 101 + 1 · 100
Basis 2
1 20
• Diese Darstellung erlaubt
einfaches Umrechnen in andere
Zahlensysteme
Security - 04 Cryptology
#10
Beziehung Dezimal- ↔ Binärsystem
• Beispiel: 14
• Zahlenbasis „10“:
Tausender
Hunderter
Zehner
Einer
103 = 100010
102 = 10010
101 = 1010
100 = 110
0
0
1
4
0 ⋅10 + 0 ⋅10 + 1 ⋅10 + 4 ⋅10
3
2
1
0
• Zahlenbasis „2“:
23 = 810
22 = 410
21 = 210
20 = 110
1
1
1
0
1 ⋅ 23 + 1⋅ 22 + 1⋅ 21 + 0 ⋅ 20
11
Umrechnung: Binär- nach Dezimalsystem
• Beispiel: 11102
• Beispiel: 100101112
1 ⋅ 23 +
1 ⋅ 27 +
1 ⋅ 22 +
0 ⋅ 26 +
1⋅ 2 +
0 ⋅ 25 +
0 ⋅ 2 = 1410
1⋅ 24 +
1
0
0 ⋅ 23 +
1⋅ 22 +
1 ⋅ 21 +
1 ⋅ 20 = 15110
12
4
25.10.2012
Umrechnung: Dezimal- nach Binärsystem
• Horner-Schema
14 2 = 7 R0
7 2 = 3R1
Least significant bit (LSB)
3 2 = 1R1
1 2 = 0 R1
Most significant bit (MSB)
1110
MSB LSB
13
Hexadezimalsystem (zur Basis 16)
• Neben dem Binärsystem gibt es für den Programmierer noch
ein weiteres wichtiges Zahlensystem
– Das Hexadezimalsystem, kurz: hex
• 16 Ziffern: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
– a bis f stehen für die Zahlen 10 bis 15
– Groß-/Kleinschreibung unerheblich (a = A)
• Umrechnung zwischen Dezimal und Hex analog zum
Binärsystem
14
Dezimal-, Binär- & Hexadezimalsystem
• Beispiel: 253
• Zahlenbasis „10“:
• Zahlenbasis „2“:
• Zahlenbasis „16“:
Hunderter
Zehner
102
101
Einer
100
2
5
3
27
26
25
24
23
22
21
20
1
1
1
1
1
1
0
1
161
160
f
d
15 ⋅161 + 13 ⋅160
15
5
25.10.2012
Verwendung des Hexdezimalsystems
• Programmierer verwenden oft Hex-Schreibweise
– Ziel: Binärzahlen kompakter schreiben
• Eine Hex-Ziffer entspricht immer vier Bit
– Bytes werden oft als Folge von zwei Hex-Ziffern angegeben
13
240
27
26
25
24
23
22
21
20
1
1
1
1
1
1
0
1
161
160
f
d
16
Rechnen mit binären Zahlen
Rechnen mit binären Zahlen
• Binäre Darstellung genügt, um alle
Rechenaufgaben durchzuführen
• Alle Grundrechenarten lassen sich auch im
binären Zahlensystem durchführen
18
6
25.10.2012
Binäre Addition
• Wiederholung: Addition im Dezimalsystem
14
+ 19
33
• Identisches Vorgehen im Binärsystem
1110
+ 10011
100001
19
Binäre Subtraktion
• Wiederholung: Subtraktion im Dezimalsystem
14
−2
12
• Identisches Vorgehen im Binärsystem
1110
− 10
1100
20
Binäre Multiplikation
• Multiplikation im Dezimalsystem
1
4
x
1
1
4
2
7
9
8
3
8
• Identisches Vorgehen im Binärsystem
1
1
1
0
x
1
1
1
1
0
1
1
1
0
0
0
0
1
1
1
1
0
1
1
1
0
21
7
25.10.2012
• Wiederholung: Division im Dezimalsystem
2
2
3
1
2
2
2
/
3
=
7
7
R
1
2
1
1
• Identisches Vorgehen im Binärsystem
1
1
1
1
0
0
1
1
0
1
0
1
0
0
0
0
1
1
1
1
1
0
1
0
0
1
1
0
1
0
0
0
0
1
0
/
1
1
=
1
0
0
1
1
0
1
R
1
0
1
1
22
Zwischenergebnis
• Alle Grundrechenarten funktionieren auch im
Binärsystem
– Natürlich auch in allen anderen Zahlensystemen
– Insbesondere auch im Hexadezimalsystem
• Bisher: Nur positive ganze Zahlen
• Wie geht man mit vorzeichenbehafteten
ganzen Zahlen um?
– Wie stellt man -7 im Computer dar?
23
Negative Zahlen
8
25.10.2012
Negative Binärzahlen mit Vorzeichenbit
• Beispiel: 3-Bit-Zahlen
Vorzeichen
Bit 1
Bit 0
Dezimalwert
1
1
1
-3
1
1
0
-2
1
0
1
-1
1
0
0
-0
0
0
0
0
0
0
1
1
0
1
0
2
0
1
1
3
• Bewertung: Prinzipiell ok
• Nachteile:
– Zwei Nullen
– VZ-Bit muss ausgewertet werden
Für Maschinen nicht optimal
25
Negative Binärzahlen im Einerkomplement
• Zur Vorzeichenumwandlung (+
wird jedes Bit invertiert
- bzw. -
+)
• Beispiel: -710
– Darstellung als 4-Bit Binärzahl: -01112
– Bitweise invertiert: 10002
• Erstes Bit 1: negative Zahl
– Zahlenwert bestimmen: Invertieren
– 10002 -01112 -710
Security - 04 Cryptology
#26
Negative Binärzahlen im Einerkomplement
•
Es ergibt sich folgender Zusammenhang:
1000
1010
1100
7
0111
6
-5
positive
Zahlen
-3
1101
0110
5
negative
Zahlen
-4
1011
-7
-6
1001
1110
2
-1
1
0
1111
0100
4
3
-2
0101
0011
0010
0001
0000
27
9
25.10.2012
Negative Binärzahlen im Einerkomplement
• Vorteile
– Einerkomplementzahlen können prinzipiell direkt
(d.h. bitweise) addiert werden!
– Beispiel: 3 – 7 = 3 + (-7)
• Nachteile
– Problem: Round Carry: siehe nächste Folie
– Zwei Nullen
Security - 04 Cryptology
#28
Addition im Einerkomplement: 4+(-2)
• Problem bei Addition: Round Carry
0100
+ 1101
Übertrag!
(1)0001
+ 0001
0010
29
Negative Binärzahlen im 2er-Komplement
• Alternative zum 1er-Komplement
• Vorzeichenumwandlung
– Invertiere bitweise und addiere 1
– Alternativ: 1er-Komplement + 1
• Beispiel: -710
-01112
– invertiere(01112) +12
10002 + 12
Security - 04 Cryptology
10012
#30
10
25.10.2012
Negative Binärzahlen im 2er-Komplement
• Positive
Zahlen:
Höchstes
Bit ist 0
1000
1001
1011
-8
-7
7
0111
-6
1010
6
0110
-5
5
-4
• Negative
Zahlen:
Höchstes
Bit ist 1
1101
4
-3
1110
0101
3
-2
1111
2
-1
1
0
0100
0011
0010
0001
0000
31
Addition im 2er-Komplement
• Beispiel: 4+(-2)
0100
– Als 4-Bit Zahl
– 410 = 01002
– -210 = 11102
+ 1110
10010
0010
• 2er-Komplementdarstellung ist sehr
praktisch!
• Moderne Rechner arbeiten
mit dieser Darstellung
Übertrag kann ignoriert werden
32
2er-Komplement und moderne Rechner
• Ganze Zahlen werden im
Arbeitsspeicher in 2erKomplementdarstellung
abgelegt
Arbeitsspeicher
• Man „sieht“ der binären
Repräsentation der Zahl nicht
an, dass sie im 2er-Komplement
dargestellt ist
– Es könnte auch eine 4-Bit
positive Zahl sein
– Es kommt darauf an, wie man
dieses Muster interpretiert
1
0
0
0
1
1
0
1
0
1
1
0
1
1
1
0
1
0
0
0
1
1
0
1
1
1
1
1
1
1
1
1
.....
0
0
0
0
0
0
0
1
0003
0
0
1
1
1
0
1
0
0002
0
1
0
1
0
1
0
0
0001
0
0
0
0
1
0
1
0
Security - 04 Cryptology
#33
11
25.10.2012
Reelle Zahlen
Darstellung reeller Zahlen
• Bisher nur ganze Zahlen betrachtet
• Für viele Aufgaben benötigt man jedoch reelle Zahlen
– Wie stellt man diese im Computer dar?
– Antwort: gar nicht
• Computer haben nur einen endlichen Speicher
– Unmöglich potentiell unendlich lange Zifferfolgen darzustellen
– Aber: Man kann auf einige Nachkommastellen genau rechnen
35
Festkommadarstellung
•
Typischerweise hat man im Computer eine feste Anzahl an Speicher für
eine Zahl verfügbar
•
Eine Möglichkeit: Diese Anzahl aufteilen in Teil vor dem Komma und
dahinter
•
Beispiel im Dezimalsystem: je 3 Stellen vor und nach dem Komma
– Es sind je 1000 Zahlen darstellbar
– Diese sind in jeweils 1000 „Teilschritte“ unterteilt
•
Beispiel: 175,381
Hunderter
Zehner
Einer
Zehntel
102
101
100
10-1
Hundertstel Tausendstel
10-2
10-3
1
7
5
3
8
1
36
12
25.10.2012
Festkommadarstellung
• Äquivalente Darstellung im Binärsystem möglich
• Annahme: 32 Bit „Breite“
– Ergibt 16 Binärstellen und 16 binäre Nachkommastellen
– Damit sind 65.536 Zahlen darstellbar
– Diese sind jeweils wieder in 65.536 Teilschritte unterteilt
• Beispiel: 1001 0110 1010 0001, 1010 0101 0000 0010
215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20 2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 2-10 2-11 2-12 2-13 2-14 2-15 2-16
1
0
0
1
0
1
1
0
1
0
1
0
0
0
0
1
1
0
1
0
0
1
0
1
0
0
0
0
0
0
1
0
37
Festkommadarstellung (Umrechnungen)
• Binärsystem
Dezimalsystem (siehe weiter vorne)
• Dezimalsystem
–
–
–
–
Binärsystem
Ebenfalls mit Horner-Schema
Getrennte Berechnung von Vor- und Nachkommateil
Vorkommateil: Division durch 2 mit Rest
Nachkommaanteil: Division Multiplikation!
(wegen negativer Exponenten)
• Beispiel: Umrechnung von 14, 1 (nächste Folie)
38
Beispiel: 14,1(nur Vorkommateil 14)
• Ergebnis: 1110
14 / 2 =
7
R
0  LSB
7/2 =
3
R
1
3/2 =
1
R
1
1/2 =
0
R
1  MSB
39
13
25.10.2012
Beispiel: 14,1(nur Nachkommateil 0,1)
•
0,1 von dezimal nach binär
– 0,1 x 2
= 0,2
= 0,2 + 0
– 0,2 x 2
= 0,4
= 0,4 + 0
– 0,4 x 2
= 0,8
= 0,8 + 0
– 0,8 x 2
= 1,6
= 0,6 + 1
– 0,6 x 2
= 1,2
= 0,2 + 1
– 0,2 x 2
= 0,4
= 0,4 + 0
…
•
•
MSB
LSB
Ergebnis (mit 16 Bit): 0, 0001 1001 1001 1001
Erstaunlich: Nachkommateil ist periodisch
– Darstellung mit endlicher Bitanzahl ist nicht exakt!
– Dennoch muss man irgendwann abschneiden (z.B. nach 16 Bit)
40
Fließkommazahlen
• Wertebereich und Genauigkeit von Festkommazahlen oft zu gering
• Große Zahlen: Wunsch nach größerem Wertebereich
– Nachkommateil nicht so relevant
– Beispiel: 343847348734734,01
• Kleine Zahlen: Wunsch nach mehr Nachkommastellen
– Dafür ist vor dem Komma nicht so viel Spielraum
– Beispiel: 1,3434378343784384
• Lösungsansatz
– Schreibe Zahl D als Produkt aus Festkommazahl und Potenz
– D = X * 10Y (X, 10 und Y sind Dezimalzahlen!)
– Bekannt aus dem Physikunterricht: 1,5637 * 10-6 m/s²
41
Fließkommazahlen
• Exponent bewirkt „Verschiebung des Kommas“
– Daher der Name Fließkommazahl
– Beispiel: 101,1 * 1011 = 101100,0
Mantisse
Exponent
(Achtung: Alles Binärzahlen)
• Sinnvoll: Mantisse mit 1 beginnen zu lassen
– Also 1,xxxxxx
– Die „Kommaverschiebung“ vermerkt man im Exponenten
– Eine solche Zahl heißt normalisiert
42
14
25.10.2012
32-Bit-Fließkommazahlen nach IEEE 754
• Rechner verwenden Darstellung nach IEEE 754
– IEEE 7534 verwendet „Platzspartrick“
– Mantisse beginnt immer mit einer 1 (außer bei der Zahl 0)
– Durch Weglassen dieser Ziffer gewinnt man ein Bit
• Format einer 32-Bit IEEE 754-Fließkommazahl
V
Exponent (8 Bit)
Mantisse (23 Bit, Nachkommateil)
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Vorzeichen (1-Bit)
43
32-Bit-Fließkommazahlen nach IEEE 754
• Wert des Exponenten eeffektiv definiert als
– eeffektiv = e – 011111112 (= e - 12710)
• Dadurch gilt
– e = 0000 0001 (1 - 127 = -126)
eeffektiv = -126
– e = 0111 1111 (127–127 = 0)
Komma nicht verschoben
– e = 1111 1110 (254–127 = 127)
eeffektiv = +127
V
Exponent e (8 Bit)
Mantisse m (23 Bit, Nachkommateil)
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
44
32-Bit-Fließkommazahlen nach IEEE 754
•
Binärer Wert g einer Fließkommazahl (für e ≠ 0 und m ≠ 0)
g = ( − 1) v ∗ (1, m ) ∗ 10 e− 01111111
• Problem: Darstellung der 0 (1,mx immer ungleich 0)
• Daher Sonderfälle
–
–
–
–
e=0 und m≠0
e=0 und m=0
e=1111 1111 und m≠0
e=1111 1111 und m=0
Zahl ist denomalisiert (0,M)
Darstellung der Zahl 0
NaN (Not a Number)
Unendlich (Infinity, je nach Vorzeichen +/-)
V
Exponent e (8 Bit)
Mantisse m (23 Bit, Nachkommateil)
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
45
15
25.10.2012
Umrechnung IEEE 754
Dezimalzahl
• Mantisse und Exponent in Dezimalzahlen umrechnen
• Damit folgende Formel benutzen
g dezimal = ( − 1) v ∗ (1,0 + M dezimal / 2 23 ) ∗ 2 edezimal −127
• Beispiel: 0100 0000 0010 0000 0000 0000 0000 0000
– v=0 010
– e=1000 0000 27 10 12810
– m= 010 0000 0000 0000 0000 0000 22110
g dezimal = ( −1) 0 ∗ (1,0 + 2 21 / 2 23 ) ∗ 2128 −127
209715210
= 1 ∗ (1 + 2 − 2 ) ∗ 21
= 1, 25 * 2
= 2 ,5
46
Dezimalzahl
IEEE 754 (am Bsp. für 14,1)
1. Dezimalzahl in Festkommabinärzahl umrechnen (mit 23 Binärstellen hinter
erster 1)
– 1110, 0001 1001 1001 1001 1001
2. Verschiebe Komma um n Stellen nach, sodass Zahl die Form 1,… bekommt
– 1,110 0001 1001 1001 1001 1001
n=3
3. Schreibe das Vorzeichenbit (1 falls negativ, 0 sonst)
– v=0
4. Rechne e=n+127 und schreibe binäre Darstellung von e
– 3+127=130
e= 1000 0010
5. Schreibe m (Bitfolge hinter dem Komma aus Schritt 2)
– m=110 0001 1001 1001 1001 1001
47
Dezimalzahl
IEEE 754 (am Bsp. für 14,1)
• Zwischenergebnis
– v=0
– e= 1000 0010
– m=110 0001 1001 1001 1001 1001
• Darstellung nach IEEE 754
– Ergebnis
– Wirklichkeit
0 100 0001 0110 0001 1001 1001 1001 1001
0 100 0001 0110 0001 1001 1001 1001 1010
( komplizierte Rundungsregeln, ignorieren wir)
48
16
25.10.2012
Rechnen mit Fließkommazahlen
1. Exponenten angleichen
– Zahl mit kleinerem Exponenten wird denormalisiert
– Grund: Kein Spezialfall für mehr als eine Stelle vor dem Komma!
2. Mantissen addieren, subtrahieren, multiplizieren oder
dividieren
3. Ergebnis normalisieren
4. Fertig!
49
Rechnen mit Fließkommazahlen (Beispiel)
1. 12,75 + 53,5
2. 12,75
1100,11
– e1 = 3 + 127 = 130
•
10000010
–
0,01100110000000000000000
+1,10101100000000000000000
10,00010010000000000000000
110101,1
– e2 = 5 + 127 = 132
– m1 = 10011 000000000000000000
3. e1 < e2 ⇒ e1 anpassen!
53,5
10000100
– m2 = 101011 00000000000000000
•
66,25
•
0100 0010 1000 0100 1000 000000000000
– 1,000010010000000000000000
e3 = 133 !
50
Fließkommazahlen: Vor- und Nachteile
• Vorteile
– Fühlen sich für Programmierer wie reelle Zahlen an
– Großer Wertebereich, inkl. Werten für 0, +inf und –inf
• Nachteile
– Sind nur endlich genau!
– Zahlen, die im Dezimalsystem exakt dargestellt werden können,
müssen im Binärsystem u.U. gerundet werden.
– Durch diese Ungenauigkeit kommt es schon bei einfachen
Rechnungen zu Rundungsfehlern
– Beispiele: siehe nächste Folie
51
17
25.10.2012
Fließkommazahlen: Rundungsfehler
•
1234.567 × 3.333333 = 4115.223
1.234567 × 3.333333 = 4.115223
4115.223 + 4.115223 = 4119.338
aber:
1234.567 + 1.234567 = 1235.802
1235.802 × 3.333333 = 4119.340
Distributivgesetz verletzt: a * x + b * x != (a+b) * x
• Konsequenz
– Für exakte Berechnungen (z.B. im Bankwesen) sind Fließkommazahlen ungeeignet
– Double-Precision (64 Bit IEEE 754): 1 Vorzeichenbit, 11 Bit Exponent, 52 Bit Mantisse
52
Zusammenfassung
•
Zahlensysteme mit verschiedenen Basen
– Umwandlung zwischen Zahlensystemen (2er, 10er, 16er)
– Rechnen mit diesen Darstellungen
•
Binäre Zahlendarstellung im Computer
–
–
–
–
•
Ganze Zahlen (mit/ohne Vorzeichen)
1er- und 2er-Komplement
Fließkommadarstellung
Grenzen (Wertebereich, Genauigkeit)?
Bitmuster im Speicher enthält keine Information über Art der Interpretation
– Als Programmierer muss man dies „wissen“ bzw. beim Programmieren definieren
– Beginnt an Adresse 3 z.B. eine 8 Bit Zahl oder 32 Bit?
– Ganzzahl, 1er- / 2er-Komplement oder IEEE 754 Kodierung?
53
18
Herunterladen