Kapitel 1: Zahlendarstellungen - Ra.informatik.tu-darmstadt.de ...
Kapitel 1: Zahlendarstellungen - Ra.informatik.tu-darmstadt.de ...
Kapitel 1: Zahlendarstellungen - Ra.informatik.tu-darmstadt.de ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Kapitel</strong> 1:<br />
<strong>Zahlendarstellungen</strong><br />
Technische Grundlagen <strong>de</strong>r Informatik 2<br />
SS 2008<br />
R. Hoffmann<br />
FG Rechnerarchitek<strong>tu</strong>r<br />
Technische Universität Darmstadt<br />
1
1. <strong>Zahlendarstellungen</strong><br />
1-2<br />
1.1 Zahl zur Basis b<br />
1.2 Vorzeichen-Betrag-Darstellung<br />
1.3 Zweikomplementzahl (signed)<br />
1.4 Einskomplementzahl<br />
1.5 Binärcodierte Dezimalzahl<br />
1.6 Gleitkommazahl<br />
IEEE-32-Bit-Gleitkommmaformat<br />
IEEE-64-Bit-Gleitkommmaformat<br />
ANHANG: 3.4 Konvertierung zwischen Zahlensystemen<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Zahlen<br />
1-3<br />
• [Abstrakte] Zahl = <strong>de</strong>r Wert einer Zahl<br />
• [Konkrete] Zahl = (Darstellung, Wert)<br />
Darstellung<br />
/////<br />
zwei<br />
101<br />
iki<br />
(türkisch)<br />
Wert<br />
5<br />
2<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Acht Cova Zeichen <strong>de</strong>s chinesischen Königs Fo-Hi vor<br />
mehr als 4000 Jahren
1-4<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Leibniz 1679
Leibniz<br />
1-5<br />
15. März 1679<br />
Das dyadische Zahlensystem. Teil I<br />
Nebenstehen<strong>de</strong> Folge kann leicht fortgesetzt wer<strong>de</strong>n, wenn man, von rechts<br />
nach links gehend, unter die Eins <strong>de</strong>r oberen Zahl jeweils 0 schreibt, bis bei<br />
<strong>de</strong>r oberen auch 0 vorkommt, worunter man dann 1 schreibt; weiter braucht<br />
man nicht zugehen, da die übrigen Ziffern gleich bleiben wie bei <strong>de</strong>r oberen<br />
Zahl.<br />
So wird aus: 1010111 87<br />
1011000 88<br />
Das ist dasselbe, wie wenn man<br />
sagte: 1011000 ist 64<br />
2 6 + * + 2 4 + 2 3 + * * * 16<br />
64 + 16 + 8 8<br />
88<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1.1 Zahl zur Basis b<br />
1-6<br />
• b-näre Zahl, b-adische Zahl,<br />
polyadische Zahl, Stellenwertzahl,<br />
Positionssystem<br />
• Folge von Ziffern X i є {0,1,.. b-1}<br />
• Darstellung (X n ...X 1 ) b besitzt <strong>de</strong>n<br />
Wert ΣX i ∗b i-1<br />
• wird oft als Gleichung<br />
geschrieben, obwohl es keine ist<br />
• Erweiterung für gebrochene<br />
Zahlen<br />
• b=2 : Dualzahl<br />
• b=10: Dezimalzahl<br />
• b=16 : Hexa<strong>de</strong>zimalzahl<br />
• b=8 : Oktalzahl<br />
• Spezielle Formen<br />
• b ist negativ<br />
• b ist komplexe Zahl<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
positive Dualzahl =„unsigned number“
Dualzahl, Oktalzahl, Hexa<strong>de</strong>zimalzahl<br />
1-7<br />
Dualzahl<br />
Oktalzahl<br />
Hexa<strong>de</strong>zimalzahl<br />
Wert, dargestellt als<br />
Dezimalzahl<br />
oooo<br />
0<br />
0<br />
0<br />
oool<br />
oolo<br />
ooll<br />
oloo<br />
olol<br />
ollo<br />
olll<br />
looo<br />
lool<br />
lolo<br />
loll<br />
lloo<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
10<br />
11<br />
12<br />
13<br />
14<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
A<br />
B<br />
C<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
llol<br />
15<br />
D<br />
13<br />
lllo<br />
16<br />
E<br />
14<br />
llll<br />
17<br />
F<br />
15
Notation<br />
1-8<br />
• Mit X[n] = X n X n-1 .. X 1 ist zum<br />
einen die Darstellung einer Zahl<br />
als Bitfolge gemeint<br />
• Mit X[n] ist zum an<strong>de</strong>ren die n-<br />
stellige Dualzahl gemeint, die<br />
<strong>de</strong>n folgen<strong>de</strong>n[dualen/binären]<br />
Wert besitzt<br />
• Mit kleinem Buchstaben x ist <strong>de</strong>r<br />
Wert <strong>de</strong>r darzustellen<strong>de</strong>n Zahl<br />
gemeint.<br />
• Wenn die Stellenzahl n vereinbart<br />
ist, dann wird verkürzt nur X<br />
anstelle von X[n] benutzt<br />
• Zur Darstellung <strong>de</strong>r Dualziffern<br />
wird hier oft<br />
• o,l benutzt anstelle von<br />
• 0, 1<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Beispiel: Darstellung und Wert<br />
1-9<br />
X[4] Darstellung<br />
X dualer o<strong>de</strong>r binärer Wert<br />
z.B. Wert x einer 2K-Zahl<br />
(als Dezimalzahl dargestellt)<br />
(als Dezimalzahl dargestellt)<br />
oooo<br />
0<br />
0<br />
oool<br />
1<br />
1<br />
oolo<br />
ooll<br />
oloo<br />
olol<br />
ollo<br />
olll<br />
looo<br />
lool<br />
lolo<br />
loll<br />
lloo<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
-8<br />
-7<br />
-6<br />
-5<br />
-4<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
llol<br />
13<br />
-3<br />
lllo<br />
14<br />
-2<br />
llll<br />
15<br />
-1
1.2 Vorzeichen-Betrag-Darstellung<br />
1-10<br />
• Vorzeichenbit V x und Betrag |x|<br />
• V x<br />
=o für positive Werte, V x<br />
=l für<br />
negative Werte<br />
• Eine positive Dualzahl X[n] mit<br />
Vorzeichenbit V x nennen wir<br />
Vorzeichenzahl (V x , X[n])<br />
• Zwei Darstellung für die Null sind<br />
möglich<br />
• Darstellung ist<br />
• gut für Multiplikation, Division<br />
• getrennte Behandlung von<br />
Vorzeichen und Betrag<br />
• schlecht für Addition und<br />
Subtraktion<br />
• Hardware zu kompliziert<br />
V x<br />
Betrag<br />
Wertebereich<br />
Abbildung<br />
Rückabbildung<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Offset Binary, Exzess-Darstellung<br />
1-11<br />
• Durch Addition <strong>de</strong>r Basis 2 n-1 wird <strong>de</strong>r<br />
Zahlenbereich so nach oben verschoben, daß<br />
nur noch Werte ≥ 0 entstehen.<br />
• Definitionsbereich<br />
x= - 2 n-1 ... (2 n-1 –1)<br />
• Abbildung X[n] = x + 2 n-1<br />
• Rückabbildung x = X[n] – 2 n-1<br />
• MSB gibt Vorzeichen an<br />
• = o: negative Zahl<br />
• = l: positive Zahl<br />
• (ist im Vergleich zur 2K-Darstellung invertiert)<br />
• Anwendungen<br />
• Digital/Analog-Umsetzer<br />
• zur Darstellung <strong>de</strong>s Exponenten in<br />
Gleitkommazahlen, als sogen. Charakteristik<br />
Dezimal<br />
x<br />
+7<br />
+6<br />
+5<br />
+4<br />
+3<br />
+2<br />
+1<br />
0<br />
-1<br />
-2<br />
-3<br />
-4<br />
-5<br />
-6<br />
Offset Binary<br />
X[4]<br />
1111<br />
1110<br />
1101<br />
1100<br />
1011<br />
1010<br />
1001<br />
1000<br />
0111<br />
0110<br />
0101<br />
0100<br />
0011<br />
0010<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
-7<br />
0001<br />
-8<br />
0000
1.3 Zweikomplementzahl<br />
1-12<br />
• auch 2K-Zahl, signed number<br />
• Standard für Festkommarithmetik<br />
• positive Werte wer<strong>de</strong>n nicht verän<strong>de</strong>rt<br />
• x=5 X[4]= 5 = olol<br />
• auf negative Werte wird 2 n addiert<br />
• x= -5 X[4]= -5 + 2 4 = -5 + loooo = 11 = loll<br />
• an <strong>de</strong>m MSB kann man erkennen, daß <strong>de</strong>r dargestellte Wert negativ<br />
ist, dieses Bit wird auch Sign genannt.<br />
• Rückabbildung<br />
• falls X n =l dann muß 2 n abgezogen wer<strong>de</strong>n<br />
• X[4]= loll<br />
x = 11 – 2 4 = -5 = loll – loooo<br />
= oll – looo<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1-13<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Zweikomplementzahl<br />
Abbildung V2K<br />
Rückabbildung V2K -1
Zahlenring<br />
1-14<br />
l ll<br />
l lo -2<br />
l ol<br />
-1<br />
-3<br />
X[3] Darstellung<br />
o oo<br />
und dualer Wert<br />
o ol<br />
0<br />
1<br />
Wert x<br />
2<br />
o lo<br />
3<br />
-4<br />
o ll<br />
l oo<br />
Overflow<br />
• Definitionsbereich ist<br />
unsymmetrisch zur Null<br />
• -2 n-1 darstellbar aber nicht<br />
+2 n-1<br />
• bei <strong>de</strong>r Addition kann das<br />
Ergebnis größer als 2 n-1 -1<br />
o<strong>de</strong>r kleiner als -2 n-1<br />
wer<strong>de</strong>n Überlauf<br />
(Overflow)<br />
• auch Komplementbildung<br />
von -2 n-1 führt zu<br />
Overflow!<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Wert x <strong>de</strong>r 2K-Zahl X[n]<br />
1-15<br />
X[4] Darstellung<br />
X dualer Wert<br />
Wert x <strong>de</strong>r 2K-Zahl<br />
oooo<br />
0<br />
0<br />
oool<br />
1<br />
1<br />
oolo<br />
ooll<br />
oloo<br />
olol<br />
ollo<br />
olll<br />
looo<br />
lool<br />
lolo<br />
loll<br />
lloo<br />
llol<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
13<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
-8<br />
-7<br />
-6<br />
-5<br />
-4<br />
-3<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
lllo<br />
14<br />
-2<br />
llll<br />
15<br />
-1
Sign-Extension<br />
1-16<br />
Arithmetische Erweiterung<br />
• Aufgabe: Die Anzahl <strong>de</strong>r Stellen einer 2K-Zahl soll von m<br />
auf n>m vergrößert wer<strong>de</strong>n, X[m] X[n]<br />
• Lösung: wenn das Sign X m<br />
• o ist , dann wer<strong>de</strong>n alle weiteren Stellen links davon auf o gesetzt<br />
• l ist, dann wer<strong>de</strong>n alle weiteren Stellen links davon auf l gesetzt<br />
• allgemein: X[n] = X m ...X m X[m]<br />
• Beispiel<br />
• X[4] = olol X[8] = ooooolol<br />
• X[4] = loll X[8] = llllloll<br />
• Beachte: 2K-Zahlen, die kleine Werte darstellen, beginnen<br />
mit oo...o o<strong>de</strong>r ll...l<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Arithmetischer Schift von 2K-Zahlen<br />
1-17<br />
• Nach rechts, Vorzeichenstelle<br />
nachziehen<br />
• Entspricht einer Division durch 2<br />
• Das Vorzeichen bleibt erhalten<br />
• Eine Stelle geht verloren (falls sie<br />
nicht als Nachkommastelle<br />
aufgehoben wird).<br />
x=-7, X 2K<br />
[4] = lool<br />
Nach arith-R-Shift: lloo, x= -4<br />
x=7, X 2K<br />
[4] = olll<br />
Nach arith-R-Shift: ooll, x=3<br />
Beachte Rundung!<br />
• Nach links<br />
• Entspricht Multiplikation mit 2<br />
• Das Ergebnis ist u.U. mit n<br />
Stellen nicht mehr darstellbar<br />
(Überlauf)<br />
x=-2, X2K[4] = lllo<br />
Nach arith-L-Shift: lloo, x= -4<br />
x=3, X2K[4] = ooll<br />
Nach arith-L-Shift: ollo, x=6<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Komplementbildung<br />
1-18<br />
• Problem: Anstelle von x soll –x<br />
dargestellt wer<strong>de</strong>n<br />
• X[n] X´[n]<br />
• Lösung: X´[n] = 2 n –X[n]<br />
• X´[n] nennt man das<br />
Komplement von X[n] gegen 2 n<br />
• Wie kann es einfach berechnet<br />
wer<strong>de</strong>n?<br />
• Es gilt<br />
• einsetzen in<br />
• ergibt<br />
• Beispiel<br />
ololoo alle Bits negieren lololl + l = lolloo<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Serielle Komplementbildung<br />
1-19<br />
• Betrachte alle Bits X i von<br />
rechts nach links, i=1 .. n<br />
• Solange das Bit X i =o ist,<br />
wird es unverän<strong>de</strong>rt<br />
übernommen.<br />
• Das erste Bit X i =l wird auch<br />
noch übernommen.<br />
• Alle weiteren Bits wer<strong>de</strong>n<br />
negiert.<br />
• Beispiel<br />
• ololoo lolloo<br />
≥1<br />
exor<br />
X X´<br />
Schaltwerk zur seriellen<br />
Komplementbildung<br />
z ist am Anfang o und wird mit <strong>de</strong>r<br />
ersten l auf l gesetzt, wodurch die<br />
folgen<strong>de</strong>n Bits über exor negiert wer<strong>de</strong>n<br />
z<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1.4 Einskomplementzahl<br />
1-20<br />
• Auch 1K-Zahl, inzwischen kaum noch benutzt.<br />
• Unterschied zur 2K-Zahl: Es wird das Komplement gegen<br />
2 n -1 gebil<strong>de</strong>t.<br />
• positive Werte wer<strong>de</strong>n nicht verän<strong>de</strong>rt<br />
• x=5 X[4]= 5 = olol<br />
• auf negative Werte wird 2 n -1 addiert<br />
• x= -5 X[4]= -5 + 2 4 -1 = 10 = lolo<br />
• Zahlenbereich ist symmetrisch zur Null.<br />
• für die Null gibt es zwei Darstellungen<br />
• oo...o<br />
• ll...l (falls diese Darstellung nicht verboten wird)<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1-21<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Einskomplementzahl<br />
Abbildung<br />
Abbildungsvorschrift<br />
Rückabbildungsvorschrift
Komplementbildung<br />
1-22<br />
• Beson<strong>de</strong>rs einfach, alle Bits wer<strong>de</strong>n<br />
negiert:<br />
• Warum wird die 1K-Darstellung nicht<br />
benutzt?<br />
• Bei <strong>de</strong>r Addition muß im Falle eines<br />
Übertrages (Carry-Out) eine Korrek<strong>tu</strong>r<br />
+1 addiert wer<strong>de</strong>n (Hardware- und<br />
Zeitaufwand)<br />
• Für die Addition von 2K-Zahlen kann<br />
<strong>de</strong>rselbe Addierer benutzt wer<strong>de</strong>n wie<br />
<strong>de</strong>r für Dualzahlen.<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1-23<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Vergleich
Festkommazahlen in Programmiersprachen<br />
1-24<br />
Typ<br />
Bereich<br />
Bits<br />
Delphi<br />
C<br />
JAVA<br />
C#<br />
Byte<br />
unsigned<br />
byte<br />
0..255<br />
8<br />
un-<br />
Word<br />
Longword<br />
Shortint<br />
Smallint<br />
Longint<br />
Int64<br />
char<br />
unsigned<br />
short int<br />
unsigned<br />
long int<br />
unsigned<br />
long long<br />
int<br />
char<br />
short int<br />
long int<br />
long long<br />
byte<br />
short<br />
int<br />
long<br />
ushort<br />
uint<br />
ulong<br />
sbyte<br />
short<br />
int<br />
long<br />
0..65535<br />
0..4294967295<br />
0..18446744073709551615<br />
-128..127<br />
-32768..32767<br />
-2147483648..2147483647<br />
-2^63..2^63-1<br />
16<br />
32<br />
64<br />
8<br />
16<br />
32<br />
64<br />
signed<br />
signed<br />
2K<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
int<br />
Currency<br />
-922337203685477.5808..<br />
922337203685477.5807<br />
64
1.5 Binärcodierte Dezimalzahl<br />
1-25<br />
• Eine Codierung von Dezimalzahlen im Rechner<br />
• Grün<strong>de</strong> zur Verwendung<br />
• Keine Konvertierung für die externe Darstellung erfor<strong>de</strong>rlich<br />
• z.B. in Taschenrechnern<br />
• Vermeidung von Approximationsfehlern<br />
• 0,1 = o,o ooll ooll ooll .... (nicht endlich!)<br />
• In <strong>de</strong>r kommerziellen Datenverarbei<strong>tu</strong>ng<br />
• Je<strong>de</strong> BCD-Ziffer wird durch 4 Bits dual codiert.<br />
• In ungepackter Form wer<strong>de</strong>n 8 Bits zur Codierung benutzt.<br />
Dabei wer<strong>de</strong>n die höchstwertigen Bits auf oooo o<strong>de</strong>r auf ooll<br />
(ASCII) gesetzt, o<strong>de</strong>r <strong>de</strong>r EBCDIC wird verwen<strong>de</strong>t.<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Beispiele<br />
1-26<br />
• Gepackte BCD-Zahlen<br />
• 59 10 = olol lool BCD<br />
• 81 10 = looo oool BCD<br />
• Ungepackte BCD-Zahlen<br />
• 59 10 = ooooolol oooolool BCD<br />
• 81 10 = oooolooo oooooool BCD<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Negative BCD-Zahlen<br />
1-27<br />
• Möglichkeiten<br />
• Vorzeichen-Betrag-Darstellung<br />
• 9-Komplement<br />
• Komplement gegen 10 m -1<br />
• bei m Dezimalstellen<br />
• 10-Komplement<br />
• Komplement gegen 10 m<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
9-Komplement<br />
1-28<br />
• m = Anzahl <strong>de</strong>r Stellen<br />
• |x| < 499…9<br />
• Vorzeichenstelle (4 Bits)<br />
• 0 bis 4: positive Zahlen<br />
• 5 bis 9: negative Zahlen<br />
• Zwei Darstellungen <strong>de</strong>r Null<br />
• 099..9 und 999..9<br />
• Komplementbildung<br />
• (X 9K<br />
,x)(X´9K ,-x)<br />
• Für je<strong>de</strong> Ziffer wird Differenz<br />
gegen 9 gebil<strong>de</strong>t<br />
• durch Addition von 6 = ollo<br />
und anschließen<strong>de</strong>r Negation<br />
aller Bits<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
10-Komplement<br />
1-29<br />
• m = Anzahl <strong>de</strong>r Stellen<br />
• -500…0 ≤ x ≤ 499…9<br />
• Vorzeichenstelle (4 Bits)<br />
• 0 bis 4: positive Zahlen<br />
• 5 bis 9: negative Zahlen<br />
• Komplementbildung<br />
• (X1 10K<br />
,x)(X´10K ,-x)<br />
• Komplement von X 10K<br />
=500…0 ist<br />
verboten (Überlauf)<br />
• 1.) Negiere alle Bits und addiere<br />
1, merke Überträge zwischen<br />
<strong>de</strong>n Tetra<strong>de</strong>n<br />
• 2.) Addiere lolo (-6) auf alle<br />
Tetra<strong>de</strong>n, die keinen Übertrag<br />
erzeugt haben<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
BCD-Darstellung in <strong>de</strong>r IntelArchitec<strong>tu</strong>re-32<br />
1-30<br />
• 80 Bits<br />
• Vorzeichen S und 18 Dezimalstellen (Magni<strong>tu</strong><strong>de</strong>)<br />
• Kompatibel zum COBOL-Standard<br />
S d17 d16 d15 .... d0<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1.6 Gleitkommazahl, Motivation<br />
1-31<br />
• Festkommazahlen können nur<br />
einen relativ kleinen<br />
Zahlenbereich überstreichen<br />
• n Bit Wort<br />
• positive Dualzahl: 0 .. 2 n -1<br />
• Darstellung größerer Zahlen<br />
durch Verschiebung <strong>de</strong>s fiktiven<br />
Kommas nach rechts um m<br />
Stellen: Zahlenbereich wird mit<br />
2 m multipliziert<br />
• Problem<br />
• Abstand zwischen <strong>de</strong>n Zahlen ist<br />
2 m<br />
• Verschiebung <strong>de</strong>s Kommas um m<br />
Stellen nach links: Zahlenbereich<br />
wird durch 2 m dividiert<br />
• Abstand zwischen <strong>de</strong>n Zahlen ist<br />
2 -m<br />
• Der Programmierer muß sich für<br />
die Anwendung <strong>de</strong>n<br />
Zahlenbereich genau überlegen<br />
und das fiktive Komma<br />
programmtechnisch mitführen<br />
(die Festkommazahl wird auf 2 m<br />
normiert.) Ein Überlauf wird<br />
durch geeignete Normierung<br />
vermie<strong>de</strong>n<br />
• Lösung<br />
• Codierung <strong>de</strong>r Kommastellung<br />
und automatische Normierung<br />
• Zusätzliche Bits für die<br />
Kommastellung<br />
• Gleiten<strong>de</strong>s Komma: floating point<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Eigenschaften <strong>de</strong>r Gleitkommazahl<br />
1-32<br />
• Vorteile<br />
• größerer Wertebereich<br />
darstellbar<br />
• seltener: Überlauf (Overflow),<br />
Unterlauf (Un<strong>de</strong>rflow)<br />
• Programmierung vereinfacht<br />
(keine vorausgeplante<br />
Normierung)<br />
• Relative Darstellungsgenauigkeit<br />
in etwa konstant<br />
• Allgemein<br />
• Anzahl <strong>de</strong>r GK-Zahlen ist<br />
endlich.<br />
• Es gibt keine<br />
• beliebig großen/kleinen Zahlen<br />
• beliebig dicht benachbarten GKZ<br />
• Der Abstand zwischen<br />
benachbarten GKZ ist nicht<br />
konstant.<br />
• Nachteile<br />
• Hardware-Implementierung<br />
<strong>de</strong>utlich komplexer als für<br />
Festkommazahlen<br />
• Rundungsfehler entstehen,<br />
insbeson<strong>de</strong>re bei <strong>de</strong>r<br />
Addition/Subtraktion von Zahlen,<br />
<strong>de</strong>ren Kommastellungen sich<br />
stark voneinan<strong>de</strong>r unterschei<strong>de</strong>n.<br />
Genauigkeit wird vorgetäuscht.<br />
• Je nach <strong>de</strong>r Auswer<strong>tu</strong>ngsart von<br />
Formeln ergeben sich<br />
unterschiedlich große Fehler<br />
(a-b) + (c-d) ≠ (a+c) – (b+d)<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Normalisierung<br />
1-33<br />
• Wert x<br />
• Mantisse mx<br />
• Basis b<br />
• Exponent ex<br />
• Vorzeichen v x =+1/-1<br />
• k wird festgelegt (meist 0 o<strong>de</strong>r 1)<br />
• Allgemein: Mantisse wird<br />
normalisiert, um die Darstellung<br />
ein<strong>de</strong>utig zu machen und um<br />
immer mit <strong>de</strong>r höchsten<br />
Genauigkeit zu rechnen,<br />
• mx norm<br />
hat r Stellen hinter <strong>de</strong>m<br />
Komma, die erste Stelle hinter <strong>de</strong>m<br />
Komma ist >0<br />
Darstellung mehr<strong>de</strong>utig<br />
x = mx · b ex<br />
x = v x ·(mx norm · b k ) · b ex<br />
mx norm<br />
Normalisierungsbedingung k=0<br />
^<br />
mx norm = mx norm<br />
1/b ≤ mx norm ≤ 1 – 1/b r < 1<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Normalisierung (2)<br />
1-34<br />
• Speziell beim IEEE 754 -<br />
Standard wur<strong>de</strong> b=2 und k=1<br />
gewählt, d.h. die normalisierte<br />
Mantisse (mit ∧ ) liegt zwischen 1<br />
und 2-ε<br />
IEEE is an abbreviation for Insti<strong>tu</strong>te of<br />
Electrical and Electronic Engineers<br />
x = v x ·(mx norm · b k ) · b ex<br />
mx norm<br />
Normalisierungsbedingung k=1<br />
1 ≤ mx norm ≤ b – 1/b r-1 < b<br />
x = v x ∗ mx norm ∗ b ex<br />
l ≤ mx norm ≤ l,ll … l<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Beispiel Normalisierung bei b=10<br />
1-35<br />
• Mehr<strong>de</strong>utige Darstellung von<br />
300<br />
• 300 = 300·10 0 mx=300, ex=0<br />
• 300 = 30,0·10 1 mx=30, ex=1<br />
• 300 = 3,00·10 2 mx=3, ex=2<br />
• 300 = 0,30 ·10 3 mx=0,3 , ex=3<br />
• Jetzt mit k=1, r=3 normieren<br />
• Normierte Mantisse<br />
• mx norm<br />
Minimal = 0,100<br />
• mx norm<br />
Maximal = 0,999<br />
• mx^norm<br />
Minimal=1,00<br />
• mx^norm<br />
Maximal=9,99<br />
• Ein<strong>de</strong>utige Darstellung von 300<br />
• (k=0): mx norm<br />
=0,3 ex=3<br />
• (k=1): mx^norm<br />
=3,0 ex=2<br />
x = v x ·(mx norm · 10 k ) · 10 ex<br />
mx norm<br />
k=1:<br />
x = v x ∗ mx norm ∗ b ex<br />
1 ≤ mx norm ≤ 9,99 … 9<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Relativer Fehler<br />
1-36<br />
• Abstand zwischen zwei benachbarten<br />
Werten ergibt sich aus <strong>de</strong>m LSB <strong>de</strong>r<br />
Mantisse und <strong>de</strong>m Exponenten<br />
(r=Stellen <strong>de</strong>r Mantisse)<br />
• Relativer Fehler (LSB unsicher)<br />
• höchstens<br />
• b -r /b k-1<br />
• min<strong>de</strong>stens<br />
• b -r /(b k -b -r )<br />
IEEE, k=1<br />
l,oo ... ox 2 -r /1<br />
l,ll ... lx 2 -r /(2-2 -r ) ≈ 2 -r /2<br />
Wie ungenau ist die Darstellung von 8 Millionen € wenn r=24<br />
Stellen benutzt wer<strong>de</strong>n?<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Maximaler Relativer Fehler: 2 -24 etwa 0,5 € ungenau
Darstellung <strong>de</strong>s Exponenten<br />
1-37<br />
• Charakteristik (biased<br />
exponent)<br />
• Auf <strong>de</strong>n Exponenten (true<br />
exponent) wird eine Basis (bias)<br />
addiert, so daß nur noch positive<br />
Werte entstehen. (Excess-Darst.)<br />
• 1. Möglichkeit:<br />
Addition von 2 n-1<br />
• EX[n] = ex + 2 n-1 ,<br />
• verwen<strong>de</strong>t bei DEC-Rechnern,<br />
IBM/Siemens-Großrechner mit<br />
b=16<br />
• 2. Möglichkeit:<br />
Addition von 2 n-1 -1<br />
• EX[n] = ex + 2 n-1 -1<br />
• IEEE-Standard<br />
• Durch Verwendung <strong>de</strong>r<br />
Charakteristik-Darstellung und<br />
<strong>de</strong>r Anordnung (Exponent steht<br />
vor <strong>de</strong>r Mantisse) kann <strong>de</strong>r<br />
Größenvergleich zweier GK-<br />
Zahlen relativ leicht durchgeführt<br />
wer<strong>de</strong>n:<br />
• 1. Vorzeichen prüfen<br />
• 2. Dualzahlen-Vergleich <strong>de</strong>r<br />
Charakteristiken<br />
• 3. Dualzahlen-Vergleich <strong>de</strong>r<br />
Mantissen<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
IEEE-32-Bit-Gleitkommmaformat<br />
1-38<br />
• Vorzeichen V x (Sign)<br />
• Charakteristik EX = ex+127<br />
• für ex = -126 … +127<br />
• Die Mantisse MX = 1,FX wird<br />
auf Werte zwischen 1 und 2<br />
normalisiert<br />
• 1 ≤MX ≤ 2 - 2 -23<br />
• Dargestellt wer<strong>de</strong>n nur die 23<br />
Binärstellen hinter <strong>de</strong>m Komma<br />
(fraction FX), da die Stelle vor<br />
<strong>de</strong>m Komma immer gleich 1 ist.<br />
• Wert x<br />
• Betragsmäßig größter und<br />
kleinster Wert (normalisiert):<br />
V x EX F x<br />
1 8 23<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1-39<br />
Gültige und ungültige Exponenten<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Beispiele<br />
1-40<br />
x = 3,5 = 1,75 ∗ 2 1 = 1,75 ∗ 2 128-127<br />
= l,llo oooo oooo oooo oooo oooo ∗ 2 128-127<br />
= (o, 128, 0,75)<br />
= (o, looo oooo, llo oooo oooo oooo oooo oooo)<br />
x = -11,375 = -loll,oll ∗ 2 0 = –l,olloll ∗ 2 3<br />
= (l, 130, 0,421875)<br />
= (l, looo oolo, oll ollo oooo oooo oooo oooo)<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1-41<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Son<strong>de</strong>rfälle (1)
1-42<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Son<strong>de</strong>rfälle (2)<br />
Nach unten<br />
Nach Null<br />
Nach oben<br />
zur nächsten
IEEE-64-Bit-Gleitkommmaformat<br />
1-43<br />
• Das IEEE-64-Bit-Gleitkommaformat (long real) entspricht<br />
<strong>de</strong>m IEEE-32-Bit-Gleitkommaformat (short real) in seiner<br />
Aufbaustruk<strong>tu</strong>r.<br />
• Für das Vorzeichenbit wird 1 Bit, für die Charakteristik<br />
wer<strong>de</strong>n 11 Bits (bias = 1023) und für Fraction wer<strong>de</strong>n 52<br />
Bits benutzt.<br />
• Für noch höhere Ansprüche an die Rechengenauigkeit kann<br />
das IEEE-Gleitkommaformat auf (1, ≥ 15, ≥ 63) Bits<br />
erweitert wer<strong>de</strong>n.<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Gleitkommazahlen in Sprachen<br />
1-44<br />
32-Bit<br />
IEEE<br />
Short<br />
Real<br />
64-Bit<br />
IEEE<br />
Long<br />
Real<br />
80-Bit<br />
IEEE<br />
96-Bit<br />
IEEE<br />
1.2 x 10 -38<br />
.. 1.7 x<br />
10 38<br />
2.2<br />
x 10 -324 ..<br />
2.0 x 10 308<br />
Bereich<br />
+/-<br />
Dezimal-<br />
stellen-<br />
Genauigkeit<br />
7-8<br />
15-16<br />
Intel-<br />
Architec<strong>tu</strong>re<br />
32<br />
Single<br />
Real<br />
Double<br />
Real<br />
Exten<strong>de</strong>d<br />
Real<br />
FORTRAN<br />
real<br />
double<br />
precision<br />
C<br />
float<br />
double<br />
long<br />
double<br />
JAVA<br />
float<br />
double<br />
C#<br />
float<br />
double<br />
Delphi<br />
Single<br />
Double<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
128-Bit<br />
real(16)<br />
<strong>de</strong>cimal
Decimal Type in C#<br />
1-45<br />
• Der Decimal Datentyp hat eine Größe von 128 Bit. Er weist<br />
also eine höhere Genauigkeit gegenüber <strong>de</strong>m floating pointtype<br />
auf, hat aber im Vergleich zum floating point-type einen<br />
engeren Gültigkeitsbereich.<br />
• Dieser Datentyp ist dienlich für finanzmathematische<br />
Berechungen o<strong>de</strong>r Währungsumrechungen. Der<br />
Gültigkeitsbereich geht von 1,0 * 10^-28 bis 7,9 * 10^28<br />
mit 28-29 signifikanten Stellen.<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1-46<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
ANHANG<br />
• 3.4 Konvertierung zwischen Zahlensystemen<br />
• Summationsmetho<strong>de</strong><br />
• Divisionmetho<strong>de</strong><br />
• Multiplikationsmetho<strong>de</strong>
3.4 Konvertierung zwischen Zahlensystemen<br />
1-47<br />
• Gegeben: m-stellige ganze Zahl A zur Basis a<br />
• Gesucht: n-stellige ganze Zahl zur Basis b<br />
• Lösungsansatz: stelle A o<strong>de</strong>r B als Potenzreihe o<strong>de</strong>r nach <strong>de</strong>m<br />
Hornerschema dar, setze A=B.<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Summationsmetho<strong>de</strong><br />
1-48<br />
• A a B b<br />
• Erstelle eine Tabelle, in <strong>de</strong>r für<br />
je<strong>de</strong> Ziffer A i und die<br />
Stellenwertigkeit a i-1 <strong>de</strong>r<br />
äquivalente Summand A i ∗ a i-1<br />
(codiert im Zielsystem b)<br />
enthalten ist.<br />
• Lies für Ziffer A i (Zeile <strong>de</strong>r<br />
Tabelle) mit <strong>de</strong>r Stellenwertigkeit<br />
a i-1 (Spalte) <strong>de</strong>n äquivalenten<br />
Summan<strong>de</strong>n ☺.<br />
• Addiere alle Summan<strong>de</strong>n im<br />
Zielsystem.<br />
Ziffer<br />
A i<br />
Basis a<br />
0<br />
1<br />
...<br />
a-1<br />
Äquivalenter Summand, für<br />
Stellenwertigkeit a i-1 ,Basis b<br />
i=0 1 2 ... m-1<br />
☺<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
1-49<br />
Hexa<strong>de</strong>zimalzahl Dezimalzahl<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Beispiel
1-50<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Dezimalzahl Hexa<strong>de</strong>zimalzahl<br />
Beispiel
Divisionmetho<strong>de</strong><br />
1-51<br />
• A a B b<br />
• Bei <strong>de</strong>r sukzessiven ganzzahligen<br />
Division durch b stellen die Reste<br />
die gesuchten Ziffern B 1 , B 2 , .. B n<br />
dar.<br />
• Divison und Restbildung erfolgt<br />
im Quellsystem<br />
• Ziffernumcodierung ist<br />
erfor<strong>de</strong>rlich wenn b>a ist<br />
• Für <strong>de</strong>n Menschen geeignet; im<br />
Rechner sollte die Division<br />
vermie<strong>de</strong>n wer<strong>de</strong>n.<br />
Beispiel: Dezimalzahl Dualzahl<br />
LSB<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Divisionsmetho<strong>de</strong>, Dualzahl Dezimalzahl<br />
1-52<br />
• Dieses Beispiel <strong>de</strong>monstriert<br />
• <strong>de</strong>n Aufwand im Rechner wegen <strong>de</strong>r Division von Dualzahlen<br />
• die Ziffernumcodierung, weil b>a<br />
• Wahl einer Metho<strong>de</strong> mit weniger Aufwand<br />
196 10 19 R 6<br />
10<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Divisonsmetho<strong>de</strong> für gebrochene Zahlen<br />
1-53<br />
• Gegeben: Gebrochene Dezimalzahl 0,A -1 A -2 ... A -m<br />
• Gesucht: Gebrochene Dualzahl B b = o,B -1 B -2 ... B -n (hier speziell b=2)<br />
• Ansatz: o,B -1 B -2 ... B -n = A<br />
• for i:=1 to n do (im Quellsystem)<br />
• A := A ∗ b // A /(1/b)<br />
• B -i<br />
:= GanzzahligerTeil<br />
• A := A - B -i<br />
• Die Metho<strong>de</strong> kann zu <strong>de</strong>n Divisionsmetho<strong>de</strong>n gerechnet wer<strong>de</strong>n, weil<br />
eine Division durch 1/b im Quellsystem durchgeführt wird, die einer<br />
Multiplikation mit b entspricht.<br />
• Für gebrochene Zahlen ist die Divisionsmetho<strong>de</strong> im Rechner geeignet.<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Beispiel: Dezimal Dual<br />
1-54<br />
• Beispiel<br />
• 0,421875 *2 = 0,84375<br />
• 0,84375 * 2 = 1,6875<br />
• 0,6875 * 2 = 1,3750<br />
• 0,3750 * 2 = 0,75<br />
• 0,75 * 2 = 1,5<br />
• 0,5 * 2 = 1,0<br />
• 0 * 2 = 0,0<br />
• B = o,ollollo<br />
• Zum Nachrechnen<br />
• 0,1 = o,o ooll ooll ooll ... nicht endlich!<br />
• Multiplikation mit 2 kann durch BCD-Addition (x+x=2x) erfolgen.<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD
Beispiel: Dual Dezimal<br />
1-55<br />
Beispiel<br />
o,ollollo * lolo =<br />
oo,llollo um 1 Stelle verschoben<br />
ooll,ollo um 3 Stellen verschoben<br />
oloo,oolllo * lolo<br />
oo,olllo<br />
oool,llo<br />
oolo,oollo * lolo<br />
oo,ollo<br />
oool,lo<br />
oool,lllo<br />
oool,llo<br />
olll,oo<br />
looo,llo * lolo<br />
ol,lo<br />
ollo,<br />
olll,lo * lolo<br />
ol,o<br />
oloo,<br />
0lol,o<br />
B = 0,421875<br />
Die Multiplikation mit 10=lolo wird auf die stellenversetzte Addition zurückgeführt<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD<br />
Es ergeben sich die Dezimalziffern im BCD-Co<strong>de</strong>
Multiplikationsmetho<strong>de</strong><br />
1-56<br />
• A a<br />
B b<br />
geeignet zur Konvertierung ganzer Zahlen<br />
• 1. Die Ziffern A i<br />
wer<strong>de</strong>n<br />
umcodiert in die Basis b<br />
im Rechner<br />
(Rechnung im Zielsystem)<br />
• 2. B:=0<br />
• 3. for i:=m downto 1 do<br />
• B:=B ∗ a + A i<br />
Techn. Grundlagen <strong>de</strong>r Informatik 2, SS 08, R. Hoffmann, TUD