76
1 Teil I Informationsdarstellung in Rechenanlagen 1.2 Darstellung von Zahlen Themen Notation von Zahlen Zahlensysteme, Dezimalsystem und Binärsystem Konvertierung Rechnen mit Binärzahlen – positive ganze Zahlen – negative ganze Zahlen – gebrochene und reelle Zahlen – Festkomma- und Gleitkommazahlen (IEEE Standard) – Probleme der Rechengenauigkeit

1 Teil I Informationsdarstellung in Rechenanlagen 1.2 Darstellung von Zahlen Themen Notation von Zahlen Zahlensysteme, Dezimalsystem und Binärsystem Konvertierung

Embed Size (px)

Citation preview

1

Teil I Informationsdarstellung in Rechenanlagen

1.2 Darstellung von Zahlen

Themen

Notation von Zahlen

Zahlensysteme, Dezimalsystem und Binärsystem

Konvertierung

Rechnen mit Binärzahlen

– positive ganze Zahlen

– negative ganze Zahlen

– gebrochene und reelle Zahlen

– Festkomma- und Gleitkommazahlen (IEEE Standard)

– Probleme der Rechengenauigkeit

2

Darstellung von ZahlenFragen zur Zahlendarstellung:

Welche Zahlen sollen dargestellt werden? – Zusammenhängender Bereich, ganze/rationale/reelle Zahlen?

Darstellung negativer Zahlen?Darstellung rationaler und reeller Zahlen?

– Genauigkeit, Rundungsfehler?Realisierung arithmetischer Operationen auf Zahlen?– Z.B.: Wie gewährleistete man Kommutativität des „+“ Operators?

„Kopfrechnen“www.recordholders.org/

Vom Computer rechen lassen.

3

Codierung von Zahlen zum RechnenForderungen an einen Code für Zahlen:

Einfache technische Realisierung, d.h., Ablage in Binärwörtern.Leichte Konvertierbarkeit in/aus Dezimalsystem.Einfache Arithmetik, d.h. hohe Rechengeschwindigkeit, d.h. geringer Schaltungsaufwand des Rechenwerks.

Eventuell zusätzliche Anforderungen durch Anwendung, z.B.: - Fehlererkennbarkeit, wenn Zahlen zur Datenübertragung

codiert werden sollen => große Hammingdistanz. - Im Gegensatz dazu: Für die technische Realisierung eines

Zählwerks sind Codes mit kleiner Hammingdistanz vorteilhaft.

´

Möglichkeiten der Codierung:1. Ziffern auf Codewörter abbilden

oder2. Zahlen auf Codewörter abbilden

4

Codierung von Zahlen vs. Codierung von ZiffernUnterscheidung zwischen Wörter aus Ziffern und Zahlen

z.B. das Wort "00100" vs. die natürliche Zahl „Hundert“

Ziffernfolgen als Wörter in einem Text, z.B. "4711"⇨ Codierung der Ziffern mit ASCII-Codierung:

cASCII('1') = 49, cASCII('4') = 52, und cASCII('7') = 55

Für die Codierung des Worts "4711" mit der natürlichen Fortsetzung c*ASCII ergibt sich somit:

c*ASCII( "4711" ) = 52 55 49 49

Ziffernfolgen als Zahlen mit denen gerechnet werden soll⇨ ASCII- Darstellung ist für Zahlen, mit denen man arithmetische Operationen durchführen möchte, unpraktisch und verschwendet unnötig Platz.

Frage: Geht es geschickter?

für Konkatenation

5

Codierung von Zahlen mit Bitfolgen fester Länge

Gegeben: Zahl z im Dezimalsystem, z.B. 12 Binärwörter der Breite b, z.B. b = 4

oder b = 8

allgemein 2m

.....Gesucht: Codierung, c, die z auf ein binäres Codewort c(z) abbildet.

Beispiel: z = 12, c(12) ↦ 0 0 0 0 1 1 0 0

Fragen: Wie breit muss man die Binärwörter wählen, wenn man einen

bestimmten Zahlenbereich [zmin, ..., zmax] darstellen möchte? Wie stellt man negative und nicht-ganze Zahlen dar? Mit welchen Codierungen kann man einfach rechnen (+, -, *, /)? Wie wirkt sich eine Codierung auf die Rechengenauigkeit aus? Welche Binärformate werden in der Praxis eingesetzt?

6

„Natürliche“ Binärdarstellung der Ziffern 0 bis 9

Überlegung: Zur Darstellung der Ziffern {0, ..., 9} benötigen wir 10 verschiedene

Codewörter. => Man benötigt mindestens 4-stellige binäre Codewörter (mit 3 Stellen gäbe es nämlich nur 8 unterschiedliche Codewörter).

Beispiel: Codierung der Ziffern 0, ..., 9

mit binären Codewörtern der Länge 4.

cz: {0, ..., 9} → Bool4

00000001001000110100010101100111

10001001

0 ↦1 ↦2 ↦3 ↦4 ↦5 ↦6 ↦7 ↦8 ↦9 ↦

Anmerkung: Man könnte auch eine andere

Zuordnung der Ziffern zu Codewörtern wählen.

7

BCD-Codierung

Idee: Verwende zur Codierung der Ziffern 0, ..., 9

eine Tetraden-Codierung, d.h., codiere jede Dezimalziffer mit einem 4 Bitwort:

cBCD : {0, ..., 9} Bool4

Mehr-zifferige Dezimalzahlen werden dann ziffernweise mit der natürlichen Fortsetzung c*BCD codiert:

Beispiel: c*BCD(13) = cBCD(1) cBCD(3)

= 0001 0011Fragen:

Was macht man mit den nicht benötigten Code-wörtern 1010, 1011, 1100, 1101, 1110 und 1111?

Wie rechnet (+, -, *, /) man mit BCD-codierten Zahlen?

23 22 21 10 0 0 00 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 01 0 0 11 0 1 0

1 1 1 1

0123456789

......

8

Block-Codierungen für Ziffern2-aus-5-Code:– 5-Bit-Codierung ⇨ Redundanz zur Fehlererkennung– Jeweils 2 Bits sind auf 1 gesetzt, alle anderen auf 0.

9

Binärdarstellungen von Ziffern und Zahlen

Codierung der Zahlenwerte von 15 bis 22 mit drei Binärziffern:

Allgemein lassen sich mit Binärwörtern fester Länge n insgesamt 2n unterschiedliche Objekte (z.B. Ziffern oder Zahlen) darstellen.

Zur Darstellung des Zahlenbereichs [0, ..., 2n -1] ergibt sich:- mit n=4 Bits kann man 24 = 16 Zahlen codieren, z.B. 0, 1, 2 ... 15- mit n= 8 Bits die 256 Zahlen von 0 bis 255 oder -128 bis +127 - mit n= 16 Bits die Zahlen von 0 bis 65535 …- mit n= 32 Bits die Zahlen von 0 bis 4 294 967 295 …- ...

Codierung der Ziffern 0, ..., 7 mit drei Binärziffern:

0 -> 000

1 -> 001

2 -> 010

3 -> 011

4 -> 100

5 -> 101

6 -> 110

7 -> 111

15 -> 000

16 -> 001

17 -> 010

18 -> 011

19 -> 100

20 -> 101

21 -> 110

22 -> 111

10

Wichtige Zahlensysteme:Basis Bezeichnung Ziffernbereich 2 binär, dual ai 0,1{0, 1}

8 oktal ai 0, ...,7{0,1, ..., 7}

10 dezimal ai 0, ..., 9{0,1, ..., 9}

16 hexadezimal ai 0, ..., 15{0,1, ..., 9, A,B,..,F}Schreibweise

(an an-1 .... a2 a1 a0 a-1 a-2 a-3 .... )b

Beispiele: (1101)2 = 123 +122 +021 +120 = 18 +14 +02 +1 = (13)10

(4711)8 = (100 111 001 001)2 = (1001 1100 1001)2 = (9C9)16

Beachte: Per Definition gilt für alle Zahlen x: x0 = 1

b bezeichnet Basis

Anderer Ansatz: Darstellung von Zahlen im Binärsystem

Idee: Man überführt Zahlen, mit denen man rechnen möchte, in ihre Binärdarstellung und rechnet im Binärsystem.

eigentlich hexadekadisch (griechisch) oder sedezimal (lateinsich)

11

Darstellung von Zahlen im ZehnersystemZahlen werden üblicherweise als Zifferfolgen über dem Alphabet {0,...,9} angegeben und als Zahlen des Zehnersystems interpretiert.

Das Zehnersystem ist ein Stellenwertsystem, d.h., die einzelnen Ziffern einer Dezimalzahl stellen die Koeffizienten von Zehnerpotenzen dar. z.B.: 4711 = 41000 + 7100 + 110 +1 = 4103 +7102 +1101 +1100

Definition: StellenwertsystemEin Stellenwertsystem zur Basis b wird definiert durch:

an an-1 .... a2 a1 a0 a-1 a-2 a-3 .... a-m = ai bi mit -m i n

für Basis b Nat, b > 1 und Koeffizienten ai {0, b-1}

Anmerkung: Zifferfolgen werden erst durch eine Interpretation zur Zahl. Man spricht auch von b-adischen Stellenwertsystemen (b von Basis) Es gibt auch Nicht-Stellenwertsysteme; z.B. „Römische Zahlen“.

12

Konvertierung von ZahlenGegeben: Eine Zahl u zur Basis b, Schreibweise: (u)b

Gesucht: Die Zahl v zur Basis c, für die gilt: (v)c = (u)b

Dazu gibt es unterschiedliche Konvertierungsverfahren: Wiederholte Division mit Rest

z.B. anzuwenden für die Konvertierung dezimal nach binär: (v)10 ↦ (u)2

Addition von Potenzenz.B. anzuwenden für die Konvertierung binär nach dezimal: (u)2 ↦ (v)10

Hornerschemaz.B. anzuwenden für die Konvertierung binär nach dezimal: (u)2 ↦ (v)10

13

Konvertierung von binär nach dezimal (u)2 ↦ (z)10

Methode 1: Aufaddieren von 2er-Potenzen.Beispiel:

(1 1 0 0 1)2 = 1 24 + 1 23 + 0 22 + 0 21 + 1 20 =

u4 u3 u2 u1 u0

(((1 2 + 1) 2 + 0) 2 + 0) 2+1 = ((( 2 + 1) 2 + 0 ) 2 + 0) 2 + 1 = (3 2 2 + 0) 2 + 1 = 12 2 + 1 = 25 = (25)10

Horner-Schema(u)b = ui bi = ((... (unb + un-1 )b + un-2 ) b + ... + u2 )b + u1 )b + u0 = (v)c

wobei die Basis b im Zahlensystem zur Basis c ausgedrückt wird

Methode 2:

(1 1 0 0 1)2 = 1 24 + 1 23 + 0 22 + 0 21 + 1 20 = 16 + 8 + 0 + 0 1 = (25)10

Beispiel:

14

Konvertierung von dezimal nach binär (z)10 ↦ (u)10

Methode: Fortgesetzte Division mit Rest

Vorüberlegung: Wird eine natürliche Zahl z durch eine andere natürliche Zahl d

ganzzahlig geteilt, so erhalten wir einen Quotienten q und einen Rest r. Es gilt dann der Zusammenhang:

z = q d + r mit 0 r < d

Die Operatoren div und mod div bezeichnet die Operation des ganzzahligen Dividieren.

Beispiel: 39 div 8  = 4 Die Operation mod ordnet zwei Zahlen ihren Divisionsrest zu.

Beispiel: 39 mod 8  = 7 (Probe: 39 = 48 + 7)

Unter Verwendung der Operatoren von div und mod erhält man:

z = q d + r (mit 0 r < d) z = (z div d) d + (z mod d)

15

Fortgesetzte Division mit Rest

Gegeben: c-adische ganze Zahl y, neue Basis b

Gesucht: b-adische Zahl x, so dass gilt: (y)c = xi bi = (x)b mit 0 i n

Prinzip: Berechne nacheinander die Divisionsreste x0 , x1 ... xn wie folgt: x0 = y mod b x1 = (y div b) mod b x2 = ((y div b) div b) mod b

....xn = ((( ..... y div b) div b) ... div b) mod b =

0

Die Reste ergeben dann in umgekehrter Reihenfolge xn xn-1 …x2 x1 x0 aneinandergereiht die gesuchte Zahl x zur neuen Basis b.

Probe: Durch Einsetzen in die Gleichung: (y)c = xi bi = (x)c für 0 i n

29 : 2 = 14 Rest 1 = x0

14 : 2 = 7 Rest 0 = x1

7 : 2 = 3 Rest 1 = x2

3 : 2 = 1 Rest 1 = x3

1 : 2 = 0 Rest 1 = x4

0, also fertig

Das Ergebnis lautet: x4 x3 x2 x1 ,x0

= ( 1 1 1 0 1 )2

Beispiel: (29)10 ↦ (???)2

16

Konvertierung: dezimal ↦ binär

Beispiel: (2001)10 ↦ (???)2

z z div 2 z mod 2

2001 1000 1 = x0

1000 500 0 = x1

500 250 0 = x2

250 125 0 = x3

125 62 1 = x4

62 31 0 = x5

31 15 1 = x6

15 7 1 = x7

7 3 1 = x8

3 1 1 = x9

1 0 1 = x10 z = (11111010001)2

Man benutzt fortgesetzte Division mit Rest auch für die Umwandlung von Dezimalzahlen in Oktal- und Hexadezimalzahlen.

17

Oktal- und Hexdezimalsystem

Binärsystem, Oktalsystem und Hexadezimalsystem werden in der Informatik häufig benutzt, da man diese Systeme leicht in einander umrechnen kann. Beispiel:

Gruppieren wir jeweils drei Ziffern einer Binärzahl und ordnen jeder Dreiergruppe die entsprechende Oktalziffer zu, so erhalten wir die Oktaldarstellung der Zahl. Beispiel:

(10110001110011)2 = (10 1100 0111 0011)2 = (2C73)16 2 C 7 3

(10110001110011)2 = (10 110 001 110 011)2 = (26163)8 2 6 1 6 3

Anmerkungen:Eine Gruppe von 4 Bits nennt man auch ein Halb-Byte oder ein Nibble.Weitere gebräuchliche Schreibweisen für Hex-Zahlen sind:6116 = 61h = 0x61

18

Konvertierung

Beobachtung: In einigen Spezialfällen ist die Konvertierung sehr einfach – nämlich dann, wenn sich eine Basis als Potenz der anderen schreiben lässt.

( A B C )16 = ( 10162 + 11161 + 12160 )10

= ( 2560 + 176 + 12 )10 = (2748)10

( 1 0 1 0 1 0 1 1 1 1 0 0 )2

( 5 2 7 4 )8

Kontrolle: 210 + 29 + 27 + 25 + 24 + 23 + 22

= 2048 + 512 + 128 + 32 + 16 + 8 + 4= 2748

Kontrolle: 5 83 + 282 + 781 + 4 80 = 2560 + 128 + 56 + 4= 2748

19

Grundrechenarten im Dezimalsystem

Grundrechenarten a la Schularithmetik für Dezimalzahlen

x = 1 2 6 0 3 1 5 , 2y = 1 2 7 1 4 2 3 , 3

x + y = 2 5 3 1 7 3 8 , 51

Addition mit Übertrag

1 4 , 2 3 7 , 4 4 2 6 0 0 9 9 4 0 5 6 8

5 3 1 ,0 8

1

1 1 12

2 1

Multiplikation

Die in der Grundschule erlernten Verfahren zur Addition und Multiplikation von Dezimalzahlen lassen sich direkt auf alle anderen Zahlsysteme übertragen. Man benutzt allerdings das „n-adische Ein-mal-Eins“.

20

Rechnen im Binärsystem

Addition mit Übertrag Multiplikation

1 0 1 0 1+ 1 1 1 1 1

1 1 0 1 0 0

1 1 1 1 1

9 11

9 1190 9

99

dezimal:1001 1011

1001000 000000 10010 1001 1100011

binär:

1 1

+ 0

1

0 0

1

1 1 10

binäres „1+1“

binäres „11“ 0

1

0 0

0

1 0

1

21

Rechnen im BinärsystemSubtraktion

Gegeben seien die beiden Zahlen a = anan-1 ... a2a1a0 und b = bmbm-1 ... b2b1b0.

Gesucht ist die Zahl d = dndn-1 ... d2d1d0 mit d = a – b.

Berechnung der Differenz d erfolgt nach dem Prinzip der stellenweisen Addition des arithmetischen Komplements der Zahl b. Im Zehnersystem ist das Komplement die Ergänzung auf 10. Es treten zwei Fälle auf:– Ergebnis ist größer als 10 ⇨ Ziffer wird übernommen– Ergebnis ist kleiner als 10 ⇨ Ziffer wird übernommen und es gibt

einen Übertrag auf die nächste Stelle

24561

1

184

Teilrechnung: 5 – 1 = (5 + 9) – 10 = 14 – 10 = 44 – 6 = (4 + 4) – 10 = 8 – 10

Beispiel: 245 – 61 im Zehnersystem

Rechnen im Binärsystem

Beispiel: Subtraktion von Zahlen mit maximal 3 Ziffern

9-er-Komplement: Alle Ziffern zu 9 ergänzen: <058>9 = 941

10-er-Komplement: 9-er-Komplement + 1: <058>10 = 942

a – b = a + <b>10 – 1000

127 127 33 33– 58 + 942 – 58 + 942 ???? 11069 => ???? = 69 ???? 975

– 1000 – 25

Problem: Bei negativen Zahlen ist die Subtraktion von 1000 aufwändiger.Lösung: Rafinierte Darstellung von negativen Zahlen suchen.

23

Subtraktion im BinärsystemGegeben: die beiden binären Zahlen

a = anan-1 ... a2a1a0 und b = bmbm-1 ... b2b1b0

Gesucht: die Binärzahl d = a - b

arithmetischen Komplemente: Komplement zu (0)2 ist (10)2 weil (0)2 + (10)2 = (10)2 = (2)10

Komplement zu (1)2 ist (1)2 weil (1)2 + (1)2 = (10)2 = (2)10

Es treten zwei Fälle auf:- Ergebnis ist größer als (10)2 => Ziffer wird übernommen

- Ergebnis ist kleiner als (10)2 => Ziffer wird übernommen und es gibt einen Übertrag auf die nächste Stelle

100–101

010

Teilrechnung: 0 – 0 = (0 + 10) – 10 = 0 0 – 1 = (0 + 1) – 10 = 1 – 10

Beispiel: Berechne im Binärsystem die Differenz: 100 – 10

Rechnen im Binärsystem

Beispiel: Subtraktion von Binär-Zahlen mit maximal 3 Ziffern

1-er-Komplement: Alle Ziffern zu 1 ergänzen: <010>1 = 101

2-er-Komplement: 1-er-Komplement + 1: <010>2 = 110

a – b = a + <b>2 – 1000

101 (5) 101 01 (1) 01– 10 (2) + 110 – 10 (2) + 110 ???? 11011 => ???? = 11 (3) ???? 111

Problem: Bei negativen Zahlen ist die Subtraktion von 1000 aufwändiger.Lösung: 111 als –1 interpretieren

⇨ verallg. 2-er-Komplement-Darstellung.

25

Rechnen im Binärsystem: Division

Division

2 9 9 : 1 3 = 2 3 – 2 6

3 9– 3 9

0

1 0 0 1 0 1 0 1 1 : 1 1 0 1 = 1 0 1 1 1 1 1 0 1

0 1 0 1 1 0 1 1 0

1 0 1 1 0 1 1 0 1

1 0 0 1 1 1 1 0 1

1 1 0 1 1 1 0 1

0

binärdezimal

2 9 9 : 1 3

26

Multiplikation und Division durch Bitverschiebung

Einige Programmiersprachen (C, Java, ...) erlauben das Verschieben von Bits nach links bzw. nach rechts.

Beispiel: Links-Shift-Operator „<<„ bzw. Rechts-Shift-Operator „>>“

Idee:

Verwende Verschiebeoperationen zum schnellen Multiplizieren u. Teilen und zwar:

– a << n entspricht einer Multiplikation mit 2n

– a >> n entspricht einer Division durch 2n

Beispiel:

5<<3 = 5 * 23 = 40

00000000000000000000000000000101 -> 0000000000000000000000000101000

40 >> 3 = 40 / 23 = 50000000000000000000000000101000 -> 00000000000000000000000000000101

27

Darstellung ganzer positiver und negativer Zahlen

Forderung:Darstellung eines Zahlbereiches A = { an, an+1, ..., –2, –1, 0, 1, 2, , ..., bm –1 , bm}

an 0 bm

Möglichst symmetrisch zum Nullpunkt: n ~ m Konvertierung von dezimal nach binär und zurück möglichst einfach realisierbar.Arithmetische Operationen auf codierten Zahlen möglichst einfach und effizient realisierbar.

Möglichkeiten:Darstellung einer Zahl durch Vorzeichen + Betrag Exzess-q-DarstellungKomplement-Darstellung (Zweier-Komplement, Einer-Komplement)

28

Darstellung einer Zahl durch Vorzeichen + Betrag

Format: VZ Betrag

mit 4 Bit kann man z.B. die Zahlen von -7 bis +7 wie folgt darstellen:0000 = +0

0001 = +1

0010 = +2

0011 = +3

0100 = +4

0101 = +5

0110 = +6

0111 = +7

1000 = -0

1001 = -1

1010 = -2

1011 = -3

1100 = -4

1101 = -5

1110 = -6

1111 = -7

Nachteile der Darstellung:– Die Zahl Null ist durch zwei verschiedene Bitfolgen dargestellt, durch

'0000' und durch '1000', also +0 und -0. – Das Rechnen ist komplizierter geworden.

Man kann zwar eine Methode angeben, wie man die obigen Bitfolgen korrekt addieren kann. Technisch würde diese Methode auch problemlos in Rechnern verwendet werden können – es gibt aber geschicktere Darstellungen von ganzen Zahlen, die alle genannten Probleme vermeidet!

29

Exzess-q-DarstellungMotivation

Man möchte vermeiden, mit negativen Zahlen rechnen zu müssen.

IdeeVerschiebe den darzustellenden Zahlenbereich um einen Betrag q, so dass die kleinste darzustellende Zahl an nicht mehr negativ ist.

A = { an, an+1, ..., -2, -1, 0, 1, 2, , ..., bm -1, bm}

an 0 bm

A' = { an+q, an+1+q, ..., -2+q, -1+ q, 0+q, q+1, q+2, , ..., q+ bm-1, q+bm}

an +q (= 0) q q+ bm

30

Exzess-q-DarstellungBeispiel

Darzustellen sei der Bereich Z = [-16, -15, -14, ..., 0, 1, 2, ..., 15] im Exzess-q-Format mit q = 16. => Z wird wie folgt auf Z‘ abgebildet und Z‘ anschließend auf Bool5.

00000

00001

00010

01110

01111

1000010001

10010

11111

-16 ↦ -16 + q = 0-15 ↦ -15 + q = 1-14 ↦ -14 + q = 2...-2 ↦ -2 + q = 14-1 ↦ -1 + q = 15 0 ↦ 0 + q = 16 1 ↦ 1 + q = 17 2 ↦ 2 + q = 18...15 ↦ 15 + q = 31

-24

24 –1

0

q =16

31

0

31

Exzess-q-DarstellungAnmerkungen

Meistens wählt man q = 2m bei (m+1) verfügbaren Stellen im Binärwort.

Der darstellbare Zahlenbereich ist dann: [ -2m ..., 0, ..., + 2m –1 ]

Beispiel:m = 4 (also insgesamt 4+1 Bits für die Zahlendarstellung)=> q = 24 = 16=> darstellbarer Zahlenbereich: [-16 ..., 0, ..., +15]

wird abgebildet auf: [0, ..., 31]

Darstellung der Zahl (3)10 als (x)2ex

(3)10 (3)10 + (24 )10 = (00011)2 + (10000)2 = (10011) 2ex

32

Rechnen mit Zahlen in Exzess-q-Darstellung

BeispielAusführung der Addition 5 + 6 = 11 in Exzess-Darstellung

(5)10 = ( 10101 ) 2ex resultiert aus (101)2 + (10000)2

+ (6)10 = ( 10110 ) 2ex resultiert aus (110)2 + (10000)2

(1 01011 ) 2ex entspricht (11)10 + (32)10 = (43)10

Vorbereitung der Rückkonvertierung:(1 01011 ) 2ex

- (10000)2 (- 16)10 Kompensation 1. Addition von q

- (10000)2 (- 16)10 Kompensation 2. Addition von q

(01011)2 rückkonvertieren (11)10

Der bei der Rechnung entstandene Überlauf kompensiert sich bei der Rückrechnung.

Überlauf

33

Weitere Möglichkeiten zur Codierung von Zahlenbereichen

0111

0110

0101

765...210-1-2...-8

23 - 1

0010

0001

00001111

1110

1000-23

0

Darzustellen ist der Bereich Z = [-8, -7, ..., -1, 0, 1, 2, ... 7 ] => Z besteht aus insgesamt 16 Zahlen

=> wir benötigen alle Codewörter aus Bool4

cZ : Z Bool4

Welche Eigenschaften hat die Codierung cZ ?

- Eineindeutigkeit der Codierung?- Symmetrie um 0 ?- Schrittweite?- Konvertierbarkeit?- Eignung für arithmetische- Operationen („+“ und „–“) ?

Eine wie cZ aufgebaute Codierung nennt man auch Zweierkomplement-Darstellung.

34

Zweierkomplement-Darstellung

-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9

+0 ↦ 0000

+1 ↦ 0001

+2 ↦ 0010

+3 ↦ 0011

+4 ↦ 0100

+5 ↦ 0101

+6 ↦ 0110

+7 ↦ 0111

-1 ↦ 1111

-7 ↦ 1001

-6 ↦ 1010

-5 ↦ 1011

-4 ↦ 1100

-3 ↦ 1101

-2 ↦ 1110

-8 ↦ 1000

=> Es ergibt sich folgende Zuordnung:

Konvertierbarkeit: Mit 4 Bits kann man den Bereich von [-8, .., -1, 0, 1, ... +7] abdecken. Zur Codierung des Teilbereichs [0, 1, ... +7] zählt von 0 beginnend

aufwärts, bis man die obere Grenze +7 erreicht. Zur Codierung des Teilbereichs [-8, -7, ..., -2, -1] beginnt man bei –1

mit dem Codewort 1111 und zählt abwärts bis zur -8 mit dem Codewort 1000

35

Zweier-Komplementdarstellung

-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9

c(-z) = Komplement( c(z) ) + 1

Was bedeutet „Zweierkomplement-Darstellung“: Die Bezeichnung „Komplement-Darstellung“ leitet sich von einer

speziellen Eigenschaft der Codewörter ab: Um zur positiven Zahl z das Codewort c(-z) der negativen Zahl -z zu

erhalten, nimmt man das Bit-Komplement des Codeworts c(z) und addiert 1 auf.

0000

1111 0001

1110 0010

1101 0011

1000

01111001... ...

...

36

Zweier-Komplementdarstellung

-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9

c(z) = Komplement(c(-z)) + 1

Rückkonvertierung negativer Zahlen in Komplementdarstellung Gegeben: Eine negative Zahl -z in Zweier-Komplementdarstellung.

Wie kommt man zur Codierung der positiven Zahl z?

Ansatz 1: Subtrahiere 1 von c(-z) und komplementiere das Ergebnis Ansatz 2: Komplementiere c(-z) und addiere 1 auf.

0000

1111 0001

1110 0010

1101 0011

1000

01111001... ...

...

37

Zweierkomplement-Darstellung im Zahlenring0000

0001

0010

0011

1000

0100

0101

0110

01111001

1010

1011

1100

1101

1110

11110

1

2

3

4

5

6

7- 8- 7

- 6

- 5

- 4

- 3

- 2

- 1

Beachte: Die Zahlen sind modulo 16 in natürlicher Reihenfolge .

8910

11

12

13

1415

Ringdarstellung ist vorteilhaft, um die Eignung des Codes für die Durchführung arithmetischer Operationen (Addition) klar zu machen.

38

Arithmetik in der Zweier-KomplementdarstellungBeispiel: Zweierkomplementdarstellung der Zahl (– 6) 1. Bilde Binärdarstellung von 6, also 0110. 2. Bilde bitweises Komplement.3. Addiere 1 auf das Bit-Komplement.

Beispiel: Berechne ( 2 - 6 ) 1. Erzeuge -6 im Zweierkomplement.2. Führe binäre Addition 2 + (-6) durch: 0010 + 1010 = 1100.

6 0110 1001+0001 1010

2 - 6 2 + (-6) 0010+1010 1100 -4

– Das erste Bit zeigt, dass das Ergebnis eine negative Zahl ist. – Den Betrag der Zahl finden wir, indem wir das Bit-Komplement bilden

(hier 0011) und dazu 1 addieren, also 0011 + 0001= 0100.– Rückkonvertieren von 0100 ins Dezimalsystem ergibt 4.– Somit (1100 )2c -> (-4)10.

39

Arithmetik mit Zweierkomplement-Darstellung

Addition: a + n– Mit positiver Zahl n: Von a ausgehend n Schritte im Zahlenring im Uhrzeigersinn.– Mit negativer Zahl n: Von a ausgehend n Schritte gegen den Uhrzeigersinn.

Subtraktion:– Durch Addition des Komplements, d.h., es genügt, die verschiedenen Fälle der Addition zu betrachten.

Beispiel: 7+ (-3)

Multiplikation / Division: - Zurückführung auf Addition.

(Naiv, es gibt bessere Methoden.)

0000

0 12

3

4

5

6

7

7

6

5

4

32

1

0001

0010

0011

0100

0101

0110

01111001

1010

1011

1100

1101

1110

1111

8

1000

7

710 = 01112c

-310 = 11012c

710 + -310 = 1 01002c

410

40

Eigenschaften der Zweierkomplement-Darstellung

Darstellung des Zahlbereiches { -2n-1, ... , -1, 0, 1, ... , 2n-1-1 } -> Bn

unsymmetrisch zum Nullpunkt

einfache Negation einer Zahl durch Kippen aller Bits und Addition von 1

Subtraktion durch Addition des Komplements

Überlaufbehandlung: Reduktion mit mod 2n, (d.h. durch „Ignorieren“ des Überlaufs)

0000

0 12

3

4

5

6

77

6

5

4

3

2

1

0001

0010

0011

0100

0101

0110

01111001

1010

1011

1100

1101

1110

1111

8

1000

41

Logisches vs. arithmetisches Komplement

Logisches Komplement (Einer-Komplement) bezeichnet das bitweise Invertieren eines Bitwortes=> entsteht durch "kippen" aller Bits

Beispiel: n=5, b=2, x = 11001 => 1-er-Komplement von x = 00110

Zweierkomplement (arithmetisches Komplement)Für eine n-stelligen Zahl (x)b ist das Komplement (k)b diejenige Zahl, für die (x+k)b die nächst höhere Potenz der Basis b ergibt, die mit den verfügbaren n Stellen gerade nicht mehr darstellbar ist.

Beispiel: n=5, b=2, x = 11001 => k = 00111 (11001 + 00111= 100000)

Es gilt: Zweierkomplement = Einerkompelent + 1.Motivation für die Verwendung einer Komplementdarstellung

Im Binärsystem ist die Komplementbildung einer Zahl besonders einfach.Unter Verwendung des arithmetischen Komplements kann man die Subtraktion zweier Zahlen auf eine Addition des Komplements der zu subtrahierenden Zahl zurückführen.

42

Ähnlichkeit der Darstellungsformen am Beispiel

Ohne Vorzeichenbit : –77 0100 11012

Einerkomplement : –77 1011 00102

Zweierkomplement : –77 = 1011 00112c

Die Zahl –7710 soll mit 8 Bit dargestellt werden: (77)10 = (0100 1101)2

bitweise Komplementbildung

Addition von 1

Ohne Vorzeichenbit : –20 0001 01002

Einerkomplement : –20 1110 10112

Zweierkomplement : –20 = 1110 01002c

bitweise Komplementbildung

Addition von 1

Durch die Addition von 1 kann sich das Bitmuster jedoch auch an einer anderen Stelle ändern: Beispiel: Darstellung der Zahl –2010 mit 8 Bit:

1100 1101 mit Vorzeichenbit

1001 0100 mit Vorzeichenbit

43

Darstellung von gebrochenen ZahlenDie Ziffernfolge bnbn-1....b1b0,c1c2....cm-1cm bezeichnet die folgende gebrochen Dezimalzahl:

(z)10 = bn10n + bn-110n1 + ... + b1101 + b0 100 + c1 101 + c2 102 + ... + cm-1 10(m1) + cm 10m

Beispiel: 111,111 = 122 + 121 + 120 + 121 + 122 + 123

= 4 + 2 + 1 + ½ + ¼ + 1/8 = (7,875 )10

Analog können gebrochene Binärzahlen gebildet werden. Die Ziffernfolge bnbn-1....b1b0,c1c2....cm-1cm bezeichnet dabei die folgende gebrochen Binärzahl:

(z)2 = bn2n + bn-12n-1 + ... + b121 + b020 + c12-1 + c22-2 + ... +cm-12-(m-1) + cm2-m

Beispiel: 123,456 = 1102 + 2101 + 3100 + 4101 + 5102 + 6103

44

Konvertierung von BrüchenZur Konvertierung eines Dezimalbruchs in seine Binärdarstellung kann man zuerst Nenner und Zähler konvertieren und anschließend im Binärsystem die Division durchführen.

Beispiel: (0.2)10 = (1/5)10 = (1)2 / (101)2 = (1 / 101)2 = (0.0011)2

Division: 1.0000 … : 101 = 0.001100

1 0 0

1 0 0 0

1 0 0 0 1 0 1

0 0 1 1 0 1 0 1

1 0 0

Durch Basiswechsel kann es vorkommen, dass eine Zahl nur noch als unendlich lange, periodische Binärzahl darstellbar ist.

45

Konvertierung von BrüchenWeitere Beispiele

Umwandlung eines binären Bruchs in Dezimaldarstellung:

gebrochene Binärzahl gebrochene Dezimalzahl0.1 0.5 = 1/2 0.01 0.25 = 1/4 0.11 0.75 = 3/4 1.11 1.75 = 7/4

111.111 7.875 = 57/80.00011001100110011.... 0.1 = 1/10

(10000)2

(1011)2=

(11)10

(16)10

= (0.6875)10(0.1011)2 =

(1111)2

(1011)2=

(11)10

(15)10

= (0.73)10(0.1011)2 =

Ungenauigkeiten durch begrenzte Wortlänge (z.B nur 4 Bits):

46

Konvertierung von Brüchen

Potenz-Methode (dezimal -> binär):Beispiel: Umwandlung der Zahl +39,62510 in das Dualsystem.

Rest Zweierpotenz Dezimalwert Binärwert39,625 5 32 1 = a6

7,625 4 16 0 = a4

7,625 3 8 0 = a3

7,625 2 4 1 = a2

3,625 1 2 1 = a1

1,625 0 1 1 = a0

, 0,625 -1 0,5 1 = a-1

0,125 -2 0,25 0 = a-2

0,125 -3 0,125 1 = a-3

0Ergebnis: 39,62510 = 100111,1012

47

Konvertierung von nicht ganzen ZahlenDie Umwandlung einer nicht ganzen Dezimalzahl

bnbn-1....b1b0,c1c2....cm-1cm

in eine Binärzahl kann mit der Quotient-Produkt-Methode erfolgen:

1. Der Teil bnbn-1....b1b0 links vom Komma wird mit der fortgesetzten Division mit Rest umgewandelt.

2. Der Teil c1c2....cm-1cm rechts vom Komma wird mit fortgesetzter Multiplikation mit 2 umgewandelt.

Beispiel: 11,625

11 div 2 = 5 Rest 1 1,25 = 0.625 2

5 div 2 = 2 Rest 1 0,5 = 0.25 2

2 div 2 = 1 Rest 0 1,0 = 0.5 2

1 div 2 = 0 Rest 1 1011,101

48

Konvertierung von BrüchenQuotient-Produkt-Methode (dezimal ↦ binär):

Beispiel: Umwandlung der Zahl 39,62510 in das Dualsystem.

1. Konvertierung des Vorkommateils:

Division Quotient Rest 39:2 19 1 19:2 9 1 9:2 4 1 4:2 2 0 2:2 1 0 1:2 0 1

Zwischenergebnis Vorkommateil: 100111

49

Konvertierung von Brüchen

Umwandlung der Zahl 39,62510 in das Dualsystem.

2. Konvertierung des Nachkommateils:

Multiplikation Produkt Vorkomma Nachkomma Binärwert 0,625*2 1,25 1 0,25 ,1 0,25 *2 0,5 0 0,5 0 0,5 *2 1,0 1 0,0 1

Ergebnis: Nachkommateil: ,101

3. Zusammenfassungen von Vorkommakonvertierung: 100111

u. Nachkommakonvertierung: ,101

100111,101

50

Darstellung reeller und rationaler Zahlen als n-Bit-Worte

Motivation: Für viele Anwendungen benötigt man reelle bzw. rationale Zahlen, z.B.

= 3.14..., e = 2.71... , trigonometrische Funktionen, Wurzeln, Logarithmen, etc.

Problem: Für unendlich vielen Dezimalstellen ist nur eine approximative

Darstellung möglich. Dadurch Ungenauigkeiten durch Auslöschungs-effekte und Einschränkungen der Gültigkeit von Rechenregeln.Beispiel: Assoziativgesetz der Addition:

(11111113. 11111111. ) 7.5111111 =2.0000000 7.5111111 =9.5111111 11111113. ( 11111111. 7.5111111) =11111113. 11111103. =10.000000 

51

Darstellung reeller und rationaler Zahlen als n-Bit-Worte

Möglichkeiten der Darstellung als n-Bit-Wort: Festpunkt-Darstellung Gleitpunkt-Darstellung (die gebräuchlichste Darstellung)

Format der Festpunkt/Fixpunkt-Darstellung: Exakte Darstellung von m „Nachpunktstellen“ in der Binär-Darstellung

einer Zahl im n-Bit Wort. Geeignet sowohl für positive als auch für negative reelle Zahlen.

VZ (n-m-1) Vorkommastellen m Nachkommastellen n-m-1

z = (-1)vz zi bi i = m

52

Gleitpunktzahlen (1)

Zielsetzung Erfassung eines möglichst großen Intervalls der reellen Zahlen. Kleine Zahlen benötigen wenige Stellen vor dem Dezimalpunkt.

=> Mehr Stellen hinter dem Punkt (Komma) für eine größere Genauigkeit nutzen.

Bei großen Zahlen geht man umgekehrt vor. => Benötigte Flexibilität kann durch Verschieben der Punkt- Position erreicht werden.

Anlehnung an technisch wissenschaftlichen Notation mit Exponent.

Motivation Bei bisherigen Darstellungen war Größenordnung der Zahlen fest. Bei technisch- wiss. Anwendungen haben Zahlen oft von sehr

unterschiedlicher Größenordnung. z.B.: – Avogadro-Zahl (Maß für Stoffmengen ) : NA = 6.0221367 1023 – Planck‘sches Wirkungsquantum h = 6.6260755 1034 => Statt Fixpunktzahlen verwendet man auf Computersystemen

praktisch ausschließlich Gleitpunktzahlen.

53

Gleitpunkt-DarstellungKomponenten der Gleitpunkt-Darstellung: vz mant bexp Vorzeichenbit gibt an, ob die vorliegende Zahl positiv oder negativ ist. Mantisse (Nachkommastellen) besteht aus Zifferfolge, die zu einer

Basis b interpretiert wird. Mit Basis b = 2 wird m1....mn interpretiert als:

m1 21 + m2 22 + ... + mn-1 2(n1) + mn 2n

Charakteristik (oder Exponent exp) ist eine Binärzahl in Exzess-Darstellung. Sie gibt an, mit welcher 2-er-Potenz die vorliegende Mantisse zu multiplizieren ist.

Format der Gleitpunkt-Darstellung

VZ: signCharakteristik (Exponent : exp) Mantisse: mant

. . . . . .

0 1 0 0 1 1 1 0 1 1 1 0Beispiel:12-Bit Wort

54

Konvertierung von GleitpunktzahlenDezimale Gleitpunktzahlen und binäre Gleitpunktzahlen kann man ineinander umrechnen. Diese Umrechnung geht aber in beiden Richtungen nicht immer auf, wenn wir jeweils eine bestimmte Zahl von Ziffern für die Mantisse vorschreiben.

So läßt sich zum Beispiel die dezimale Zahl 0.1 nicht exakt durch eine binäre 32-Bit-Gleitpunktzahl darstellen (siehe Tabelle)

V exp Mantisse Zahlenwert0 01111101 1100011001100110011001100 0.0999999940...0 01111101 1100011001100110011001101 0.1000000015...

Bereits beim Umrechnen dezimaler Gleitpunktzahlen in binäre Gleitpunktzahlen treten also Rundungsfehler auf. Weitere Ungenauigkeiten entstehen beim Rechnen mit Gleitpunktzahlen.Vorsicht, da die mit Gleitkommazahlen erzielten Ergebnisse fast nie exakt sind.

55

Gleitpunkt-Darstellung

Die Größenordnung einer Gleitpunktzahl wird bestimmt durch die Charakteristik (und die gewählte Basis b).Die Genauigkeit wird bestimmt durch die Länge der Mantisse.

=> Stehen Bitwörter der Länge n zur Verfügung, so ist die Aufteilung der Bits für Charakteristik und Mantisse entscheidend für den darstellbaren Wertebereich und die erzielbare Genauigkeit.

ProblemEine Zahl x hat beliebig viele Gleitpunkt-Darstellungen. Beispiel:

z = 0.00123 = 0.0123 101 = 0.123 102 = ... 0.0000123 102 .... (Auch wenn nur n-Bit-Wörter zur Verfügung stehen, bleiben viele

Varianten zur Auswahl.)

ZielWähle ein normiertes (vereinheitlichtes) Format für Gleitpunktzahlen zur Basis 2 für ihre Darstellung in einem n-Bitwort.

56

Normierte Gleitpunktzahlen

z = 1.m1m2...mn-1mn 2exp

Satz:Jedes x 0 besitzt genau eine Darstellung der Form:

x = m 2exp mit 1 m|2 (oder wahlweise 0 m|1)

Normierte DarstellungBei einer zur Basis 2 normierten Gleitpunktzahl x 0 wird der Exponent so gewählt, dass für die Mantisse gilt: 1 |m|2 und der Betrag der Zahl folgende Form hat:

z = 0.1m2...mn-1mn 2exp

Andere Möglichkeit der Normierung: Normiere so, dass für Mantisse gilt 0 |m|1 und erste Ziffer nach dem Punkt eine 1 ist:

Normierte Gleitpunktzahlen

Vorteile normierter Gleitpunktzahlen:- für Mantissen mit 1 m|2 braucht man die führende 1 nicht zu speichern, da sie immer da ist.

- Jede Gleitpunktzahl kann in eine normierte Gleitpunktzahl umgewandelt werden, weil eine Verschiebung der Bits um eine Stelle nach rechts bzw. links den Zahlenwert nicht ändert, wenn gleichzeitig der Exponent um 1 erhöht bzw. erniedrigt wird.

- Die Mantissen-Bits können optimal ausgenutzt werden, da keine überflüssigen Nullen gespeichert werden müssen. Eine auf das Format 1. m1 m2 ... mn normierte Gleitpunktzahl mit Vorzeichen

VZ, und Exponent exp stellt also folgenden Zahlenwert dar.

(-1)VZ (1 + m1 21 + m2 22 + ... + mn 2n) 2exp

Formal ist die Zahl 0 nicht normalisiert darstellbar, weil 0 0.1xxxx 2exp Man interpretiert deshalb die kleinste darstellbare Gleitpunktzahl als 0.

58

Gleitpunkt-Darstellung in Programmiersprachen

Java, C, C++, C# Datentyp float: 32 Bit breite Gleitkommazahl (nach IEEE 754-1985)

größtmögliche positive Zahl: 3.40282347e+38fkleinstmögliche positive Zahl: 1.40239846e-45f

Datentyp double: 64 Bit breite Gleitkommazahl (nach IEEE 754-1985) größtmögliche positive Zahl: 1.79769313486231570e+308kleinstmögliche positive Zahl: 4.94065645841246544e-324

Anmerkung Die meisten Computer-Prozessoren haben sog. Floating-Point

Coprozessoren (oder auch „Synergistic Processing Elements“), die auf Gleitpunktarithmetik spezialisiert sind.

Die Leistungsfähigkeit solcher Prozessoren wird in FLOPS (Floating-Point-Operations Per Second) gemessen. - z.B. „cell-Microprozessor“ schafft mehrere Giga-FLOPS- Supercomputer schaffen bereits einige Peta-FLOPS

59

Arithmetik mit Gleitpunkzahlen

Addition: Sei z1 z2, somit e1 e2:

erg = z1 + z2

= m1 2e1 + (m2 2e2e1 ) 2e1 Exponentenabgleich

= (m1 + m2 2e2e1 ) 2e1 Addition der Mantissen

= m 2e noch nicht normalisiertes Ergebnis

Führe Normalisierung für erg = m 2e durch:

Falls (m1 + m2 2e2e1 ) < 2

dann: m := (m1 + m2 2e2e1 ) und e := e1

sonst: m := (m1 + m2 2e2e1 ) / 2 und e := e1 +1

Seien z1 und z2 normierte GPZ mit z1 = m1 2e1 und z2 = m2 2e2

Vergleich von z1 und z2

z1 < z2 gdw. (e1 < e2) oder (e1 = e2 und m1 < m2 )

z1 = z2 gdw. (e1 = e2) und (m1 = m2 )

60

Gleitpunkt-Darstellung

Beispiel:Gleitpunktzahl mit 12 Bit Wortlänge:

Darstellbarer ZahlenbereichDie betragsmäßig größte Zahl ist die mit größtem Exponenten und der größten Mantisse.Die betragsmäßig kleinste Zahl > 0 hat den kleinsten Exponenten (= 0 – Exzess) und die kleinste Mantisse, die in normalisierter Form darstellbar ist.

Vorzeichen: 1 Bit für Vorzeichen der MantisseExponent: 5 Bit für Exzess-q-Darstellung

=> Die größte positive Zahl ist 24 – 1 = 15. Interpretiert als Exponent zur Basis 2 ist exp somit 215.

Mantisse: 6 Bit. mit 0 < mant < 1 ist die größte Mantisse: 1 – 2 –m

Die größte darstellbare Zahl ist (1 – 2-m) 2q-1 = (1 – 2-6 ) 215.

0 1 0 0 1 1 1 0 1 1 1 0

VZ mantexp

61

Addition und Subtraktion mit Gleitpunkzahlen

Konvertierung

Normalisierung

Exponent anpassen

Addition

Rückkonvertierung

z1 + z2

z1

Exponent anpassen

Normalisierung

Konvertierung

z2

62

Beispiel: Addition mit GleitpunkzahlenGegeben: z1 = (-15.2)10 und z2 = (-5.75)10

Gesucht: erg := z1 + z2

Ressource: 16 Bit Wörter: 9 Bit für Mantisse, 6 für Charakteristik, 1 VZ-Bit. Schritt 1: Konvertierung von z1 und z2

z1 = (-15.2)10 ↦ (-1111.0011 0011....)2

z2 = (-5.75)10 ↦ (-101.11)2

Schritt 2: Normalisieren von (z1)2 und (z2)2 ins Format: 1.m1 ...m9 2e

Schritt 2.1: Verschieben der Mantisse z1 = (-1111.0011 0011....)2 ↦ (-1.1110011 0011....)2 23

z2 = (-101.11)2 ↦ (-1.0111)2 22

Schritt 2.2: Exponenten in Exzess-q Format darstellen Mit 6 Bit für Charakteristik folgt: q = 261 = 25 = 32Exponent von (z1)2 = (3)10 + q = (3)10 + (32)10 = (35)10 = (100011)2

Exponent von (z2)2 = (2)10 + q = (2)10 + (32)10 = (34)10 = (100010)2

63

Beispiel: Addition mit Gleitpunkzahlen

Nach Schritt 2 sind z1 = (-15.2)10 und z2 = (-5.75)10 normalisiert und wie folgt als 16-Bitwörter abgelegt:

Schritt 3: Anpassung der Exponenten von (z1)2 und (z2)2, so dass Addition durchgeführt werden kann.Weil (z1)2 > (z2)2 wird der Exponent von (z2)2 angepasst:

(z2)2 = (-1.0111)222 ↦ ((-1.0111)222 3 ) 23 = (-0.10111)223

(z1 )2 =

VZ exp mant

(z2 )2 =

110011111100011 0

000111010100011 0

VZ exp mant

(z2 )2 = 001110101100011 0

64

Beispiel: Addition mit Gleitpunkzahlen

Schritt 4: Addition der Mantissen von (z1 )2 + (z2 )2

Schritt 5: Normalisierung des Ergebnisses (z1)2 + (z2)2

Notwendig, weil Überlauf der Mantisse am linkesten Bit. Man darf hier nicht den für den Exponenten reservierten Bereich überschreiben! Normalisierung erfolgt durch verschieben der Mantisse um 1 Stelle nach rechts und Erhöhung des Exponenten um 1.

(z1 )2 =

VZ exp mant

110011110010011 0

(z2 )2 = 001110100010011 0

+

111100100010011 0

1 1 1 1

(z1+z2 )2 = 111001011010011 1

Zwischen-ergebnis

65

Beispiel: Addition mit Gleitpunkzahlen

Schritt 6: Rückkonvertierung des Ergebnisses (z1+z2 )2 in die Dezimal-Darstellung.

Schritt 6.1: Bestimmung des Exponenten (100101)2exzess -> (100101)2exzess – q = (000101)2 = (5)10

somit: (0.101001111)2 25 = (10100.1111)2

Schritt 6.2: Konvertierung von (10100.1111)2

1 24 + 023 + 122 + 021 + 020 + 12-1 + 12-2 + 12-3 + 12-4

=(20.9375 )10

Schritt 6.3 Berücksichtigung des Vorzeichens:=> Ergebnis lautet: - 20.9375 (exaktes Ergebnis wäre – 20.95)

(z1+z2 )2 = 111001011010011 1

66

Arithmetik mit GleitpunkzahlenSubtraktion: Im Prinzip wie Additionerg = z1 - z2 = z1 + (- z2 ) Addition einer negierten Zahl

= m1 2e1 + (- (m2 2e2-e1 )) 2e1 Exponentenangleichung

= (m1 + (- (m2 2e2-e1 )) 2e1 Addition der Mantissen, wobei die negative Zahl ins Zweier-

Komplement zu überführen ist und ein etwaiger Überlauf ignoriert wird.

= m 2e (Übungsblatt!)Multiplikation: durch Multiplikation der Mantissen und Addition der Exponenten

erg = z1 z2 = (m1 m2 ) 2e1+e2

Beachte: Berechnung der Vorzeichen erfolgt separat!

67

Multiplikation von Gleitpunkzahlen

Konvertierung

Normalisierung

Multiplikation Mantisse / Addition Exponent

Rückkonvertierung

z1 z2

z1

Normalisierung

Konvertierung

z2

Normalisierung

68

Multiplikation von Gleitpunkzahlen

Beispiel: (15.2)10 (5.75)10 = ?

Addition der Exponenten in Exzess-q-Format

15.2 (1111.0011....) (0.11110011) 24 exp2ex = 100100

5.75 (101.11) (0.10111) 23 exp2ex = 100011

1 000111 – 100000Exzess

100111 – 100000

(111)2 = 710

Multiplikation der Mantissenm1 m2: 0 . 1 1 1 1 0 0 1 1 0 . 1 0 1 1 1

0.1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 10 101010 10 1 1 1 1

0 . 1 0 1 0 1 1 1 0 1 0 1 0 1

mant abschneiden Rundungsfehler

Exzess

69

RundungForderung im IEEE-Standard:

Das Ergebnis, das man durch eine arithmetische Operation mit dem Rechner erhält, soll dasselbe sein, als wenn man exakt rechnet und anschließend entsprechend eines geeigneten Modus rundet.

Vier definierte Rundungsmodi für „die Rundung zum nächstliegenden Gleitkommawert“: Falls der Abstand zu zwei Gleitkommawerten gleich ist, wird zu jenem Wert gerundet, dessen niederwertigste Stelle eine gerade Zahl ist ("round-to-even"-Regel).Rundung zum nächsten Gleitkommawert in Richtung 0Rundung zum nächsten Gleitkommawert in Richtung +Rundung zum nächsten Gleitkommawert in Richtung -

70

Rundung bei Addition

Rundung aufgrund eines auftretenden Übertrags und anschließender NormalisierungBeispiel: Basis 10, drei signifikante Stellen

2,34 102

(Übertrag) +8,51 102

------------

10,85 102 wird zu 1,08 103 gerundet

Rundung im Zuge einer ExponentenanpassungBeispiel: Basis 10, drei signifikante Stellen

2,34 102 2,3400 102

+2,56 100 --Exponentenanpassung--> +0,0256 102

-------------------

2,3656 102 wird zu 2,37 102

gerundet

IEEE-754 Normalisierung der Mantisse auf 1.xx

71

Rundung bei Addition

Rundung aufgrund eines Übertrag sowie einer ExponentenanpassungBeispiel: Basis 10, drei signifikante Stellen

9,51 102 +0,642 102

----------------

10,152 102 wird zu 1,02 103 gerundet.

72

Probleme mit Gleitpunkzahlen

Überlauf („Overflow") des Exponenten(z.B. bei Multiplikation sehr großer Zahlen: 0.9E25*0.9E25 nicht in für den Exponenten vorgesehener Länge darstellbar)Unterlauf („Underflow") des Exponenten(z.B. bei Multiplikation sehr kleiner Zahlen: 0.9E-25*0.9E-25 nicht in für den Exponenten vorgesehener Länge darstellbar)

Große Rundungsfehler möglich z.B. – durch Exponentenangleich bei Addition sehr unterschiedlich

großer Zahlen – durch Stellenauslöschung bei Subtraktion gleich großer ZahlenBeispiel: 1023 ( (109 +1) -1) liefert den Wert 0

1023 (109 +(1-1) ) liefert den Wert 1014 !!!

Fazit: Ergebnisse von Gleitpunktberechnungen können u.U. erheblich von dem exakten Wert abweichen!!

73

Probleme mit Gleitpunkzahlen

Die üblichen Rechengesetze gelten i. Allg. nicht (insbesondere nicht das Assoziativgesetz).Rechnungen im techn./wiss. Bereich mit reellen Zahlen können im schlimmsten Fall um Größenordnungen falsche Ergebnisse liefern. Es gibt zahlreiche Beispiele für technisches Fehlverhalten aufgrund ungenügender Berücksichtigung der Fehlerquellen beim Rechnen mit Gleitpunktzahlen: Raketenabstürze, am Ziel vorbeifliegende Raumsonden, fehlerhafte Steuerungen industrieller Anlagen, ...

Vorsichtsmaßnahmen:Bei Abfragen: – Nicht auf x == 0 testen , sondern |x| < d mit sehr kleinem d, d > 0. – Statt x == y besser |x – y| < d verwenden.Verwendung einer exakten Arithmetik, z.B. die Intervallarithmetik von Kulisch (Univ. Karlsruhe).

74

Rechenungenauigkeiten mit fatalen Folgen

1996: Ariane 5 explodiert beim TestflugGrund: Leitsystem speichert Horizontalgeschwindigkeit (64 Bit) in 16-Bit-Variable. Es kommt zum Überlauf => Fehlermeldung => Abschaltung => unkontrollierter Flug => automatische Selbstzerstörung.1991: US Abwehrrakete verfehlt Ziel (1. Golfkrieg) Folge: 28 Tote, über 100 VerletzteGrund: Berechnung der Flugbahn greift auf die Systemuhr mit einer Auflösung von 1/10 Sek. (binär: 0.00011) zurück. Wert wird mit 24-stelliger Gleitpunktzahl multipliziert. Nach 100 Stunden hatte sich der Fehler auf 0.34 Sekunden Abweichung aufgeschaukelt. Bei der ballistischen Berechnung der Flugbahn gab das eine Abweichung von 687 Metern. Folge: Abwehrgeschoss fliegt an gegnerischen Rakete vorbei. Neben groben Fehlern, wie im Fall der Ariane 5, können auch kleinste Abweichungen gravierende Auswirkungen haben, die für Menschen jedoch kaum antizipierbar sind (Beispiele aus der Chaostheorie).

75

Zahlenwerte und Ihre Darstellung im User Interface

2007: Microsofts Tabellenkalkulation Excel spuckt den Wert 100.000 aus, wenn ein Rechenergebnis eigentlich 65.535 bzw. 65.536 lautet.

2007: CO2 Calculatorwww.gdrc.org/uem/co2-cal/co2-calculator.html

-

Was bedeutet hier „NaN“ ?

76

Online-Quellen zum Üben:

Umwandlung binär <-> dezimal und anderehttp://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm

IEEE 754 Umrechner (beachte: Normierung auf 1,xxx)http://www.h-schmidt.net/FloatApplet/IEEE754de.html

Codierung von Zahlenhttp://math.hws.edu/TMCM/java/DataReps/index.html