Teil I Informationsdarstellung in Rechenanlagen



Ähnliche Dokumente
Vertiefungsstoff zum Thema Darstellung von Zahlen

Binärdarstellung von Fliesskommazahlen

Einführung in die Informatik I

Technische Informatik - Eine Einführung

Binäre Gleitkommazahlen

Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird.

1. Das dekadische Ziffernsystem (Dezimalsystem) Eine ganze Zahl z kann man als Summe von Potenzen zur Basis 10 darstellen:

Lösungen: zu 1. a.) b.) c.)

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10

Grundlagen der Informatik

Zahlensysteme. Digitale Rechner speichern Daten im Dualsystem 435 dez = binär

Kapitel 1. Zahlendarstellung. Prof. Dr. Dirk W. Hoffmann. Hochschule Karlsruhe w University of Applied Sciences w Fakultät für Informatik

Einfache Arithmetik, d.h. hohe Rechengeschwindigkeit, d.h. geringer. - Im Gegensatz dazu: Für die technische Realisierung eines

Vorlesung Programmieren. Agenda. Dezimalsystem. Zahlendarstellung. Zahlendarstellung. Oder: wie rechnen Computer?

2 Darstellung von Zahlen und Zeichen

Musterlösung 2. Mikroprozessor & Eingebettete Systeme 1

Kapitel 2 Grundlegende Konzepte. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Dezimalkomma (decimal point) rechts von Stelle mit Wertigkeit 100 nachfolgende Stellen haben Wertigkeit 10-1, 10-2, etc.

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen?

Zahlendarstellungen und Rechnerarithmetik*

Zahlensysteme: Oktal- und Hexadezimalsystem

Grundlagen der Informatik 2 Grundlagen der Digitaltechnik. 1. Zahlensysteme

Kapitel 2. Zahlensysteme, Darstellung von Informationen

Zahlensysteme Seite -1- Zahlensysteme

Inhalt: Binärsystem 7.Klasse - 1 -

Computerarithmetik ( )

2 Rechnen auf einem Computer

Repräsentation von Daten: Binär-, Oktal- u. Hexadezimalcodierung von ganzen und rationalen Zahlen

Grundlagen der Informatik Übungen 1.Termin

in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision große Dynamik möglich durch Verwendung von Gleitkommazahlen

Grundlagen der Technischen Informatik Wintersemester 12/13 J. Kaiser, IVS-EOS

2. Negative Dualzahlen darstellen

Grundstrukturen: Speicherorganisation und Zahlenmengen

Lösung 1. Übungsblatt

Information in einem Computer ist ein

Modul 114. Zahlensysteme

Das Rechnermodell - Funktion

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Binäre Division. Binäre Division (Forts.)

Das Maschinenmodell Datenrepräsentation

Numerisches Programmieren, Übungen

Musterlösung 2. Mikroprozessor & Eingebettete Systeme 1

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Im Original veränderbare Word-Dateien

Grundlagen der Informatik I Informationsdarstellung

Black Box erklärt Zahlensysteme.

Zahlensysteme Das 10er-System

Einführung in die Programmierung

Zeichen bei Zahlen entschlüsseln

Rechnerarithmetik Ganzzahlen und Gleitkommazahlen Ac 2013

, WS2012 Übungsgruppen: Mo.,

Zahlensysteme. von Christian Bartl

Theoretische Informatik SS 04 Übung 1

a) Da die Zahlen im IEEE-32Bit-Format dargestellt werden sollen, ist der Bias = 127.

Grundlagen der Technischen Informatik. 4. Übung

Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen

Grundlagen der Informatik Übungen 1. Termin Zahlensysteme

Teil II. Schaltfunktionen

Übungen zu Informatik 1

Numerische Datentypen. Simon Weidmann

Mikro-Controller-Pass 1

1. 4-Bit Binärzahlen ohne Vorzeichen 2. 4-Bit Binärzahlen mit Vorzeichen 3. 4-Bit Binärzahlen im 2er Komplement 4. Rechnen im 2er Komplement

bereits in A,3 und A.4: Betrachtung von Addierschaltungen als Beispiele für Schaltnetze und Schaltwerke

Prinzip 8 der von-neumann Architektur: (8) Alle Daten werden binär kodiert

Kapitel 4A: Einschub - Binärcodierung elementarer Datentypen. Einschub: Teile aus Kapitel 2 in Küchlin/Weber: Einführung in die Informatik

Einführung in die Informatik I

Daten verarbeiten. Binärzahlen

BSZ für Elektrotechnik Dresden. Zahlenformate. Dr.-Ing. Uwe Heiner Leichsenring

Informationsdarstellung im Rechner

Eine Logikschaltung zur Addition zweier Zahlen

Technische Informatik I

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 3 1. Semester ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN

Primzahlen und RSA-Verschlüsselung

Technische Grundlagen der Informatik Kapitel 8. Prof. Dr. Sorin A. Huss Fachbereich Informatik TU Darmstadt

2.0 Zahlendarstellung, Konvertierungsalgorithmen und arithmetische Algorithmen

Grundlagen der Informatik (BSc) Übung Nr. 5

Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192.

0 Im folgenden sei die Wortlänge gleich 8 (d. h.: es wird mit Bytes gearbeitet).

Binär- und Hexadezimal-Zahl Arithmetik.

Daten, Informationen, Kodierung. Binärkodierung

Zahlensysteme. Zahl Stellenwert Zahl Zahl =

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Zahlensysteme und Datendarstellung

Leseprobe. Taschenbuch Mikroprozessortechnik. Herausgegeben von Thomas Beierlein, Olaf Hagenbruch ISBN:

Lektion 1: Von Nullen und Einsen _ Die binäre Welt der Informatik

Lineare Gleichungssysteme

Repräsentation von Daten Binärcodierung ganzer Zahlen

Übungsaufgaben. - Vorgehensweise entsprechend dem Algorithmus der schriftlichen Multiplikation

Zur Universalität der Informatik. Gott ist ein Informatiker. Die Grundordnung der Welt läßt sich mathematisch formulieren:

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben. Präsenzaufgaben

4. Übungsblatt zu Mathematik für Informatiker I, WS 2003/04

Übung RA, Kapitel 1.2

Computergrundlagen Boolesche Logik, Zahlensysteme und Arithmetik

Informatik I: Abschnitt 7

3 Rechnen und Schaltnetze

N Bit binäre Zahlen (signed)

Mathematische Grundlagen der Kryptographie. 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe. Stefan Brandstädter Jennifer Karstens

2 Einfache Rechnungen

Leitung 1 Leitung

FH Jena Prüfungsaufgaben Prof. Giesecke FB ET/IT Binäre Rechenoperationen WS 09/10

Transkript:

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

Darstellung von Zahlen Fragen 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. 2

Codierung von Zahlen zum Rechnen Forderungen 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 oder 2. Zahlen auf Codewörter abbilden 3

Codierung von Zahlen vs. Codierung von Ziffern Unterscheidung 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: c ASCII ('1') = 49, c ASCII ('4') = 52, und c ASCII ('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 für Konkatenation 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? 4

Gegeben: Codierung von Zahlen mit Bitfolgen fester Länge Zahl z im Dezimalsystem, z.b. 12 Binärwörter der Breite b, z.b. b = 4 Gesucht: oder b = 8 allgemein 2 m... 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 [z min,..., z max ] 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? 5

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. c z : {0,..., 9} Bool 4 Anmerkung: Man könnte auch eine andere Zuordnung der Ziffern zu Codewörtern wählen. 0 1 2 3 4 5 6 7 8 9 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 6

BCD-Codierung Idee: Verwende zur Codierung der Ziffern 0,..., 9 eine Tetraden-Codierung, d.h., codiere jede Dezimalziffer mit einem 4 Bitwort: c BCD : {0,..., 9} Bool 4 Mehr-zifferige Dezimalzahlen werden dann ziffernweise mit der natürlichen Fortsetzung c* BCD codiert: Beispiel: c* BCD (13) = c BCD (1) c BCD (3) Fragen: = 0001 0011 Was macht man mit den nicht benötigten Codewörtern 1010, 1011, 1100, 1101, 1110 und 1111? Wie rechnet (+, -, *, /) man mit BCD-codierten Zahlen? 0 1 2 3 4 5 6 7 8 9 2 3 2 2 2 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0... 1 1 1 1 7

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

Binärdarstellungen von Ziffern und Zahlen Codierung der Ziffern 0,..., 7 mit drei Binärziffern: Codierung der Zahlenwerte von 15 bis 22 mit drei Binärziffern: 0 -> 000 4 -> 100 15 -> 000 19 -> 100 1 -> 001 5 -> 101 16 -> 001 20 -> 101 2 -> 010 6 -> 110 17 -> 010 21 -> 110 3 -> 011 7 -> 111 18 -> 011 22 -> 111 Allgemein lassen sich mit Binärwörtern fester Länge n insgesamt 2 n unterschiedliche Objekte (z.b. Ziffern oder Zahlen) darstellen. Zur Darstellung des Zahlenbereichs [0,..., 2 n -1] ergibt sich: - mit n=4 Bits kann man 2 4 = 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 -... 9

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. Wichtige Zahlensysteme: Basis Bezeichnung Ziffernbereich 2 binär, dual a i 0,1 {0, 1} 8 oktal a i 0,..., 7 {0,1,..., 7} 10 dezimal a i 0,..., 9 {0,1,..., 9} 16 hexadezimal a i 0,..., 15 {0,1,..., 9, A,B,..,F} Schreibweise eigentlich hexadekadisch (griechisch) oder sedezimal (lateinsich) Beispiele: (a n a n-1... a 2 a 1 a 0 a -1 a -2 a -3... ) b b bezeichnet Basis (1101) 2 = 1 2 3 +1 2 2 +0 2 1 +1 2 0 = 1 8 +1 4 +0 2 +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: x 0 = 1 10

Darstellung von Zahlen im Zehnersystem Zahlen 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 = 4 1000 + 7 100 + 1 10 +1 = 4 10 3 +7 10 2 +1 10 1 +1 10 0 Definition: Stellenwertsystem Ein Ein Stellenwertsystem zur zur Basis b wird wird definiert durch: a n a n n-1... n-1... a 2 a 2 1 a 1 0 a 0-1 a -1-2 a -2-3... -3... a -m = -m a i b i i i mit mit -m -m i i n für für Basis b Nat, Nat, b > 1 und und Koeffizienten a i i {0, {0, b-1} 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. 11

Konvertierung von Zahlen Gegeben: 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 Potenzen z.b. anzuwenden für die Konvertierung binär nach dezimal: (u) 2 (v) 10 Hornerschema z.b. anzuwenden für die Konvertierung binär nach dezimal: (u) 2 (v) 10 12

Konvertierung von binär nach dezimal (u) 2 (z) 10 Methode 1: Aufaddieren von 2er-Potenzen. Beispiel: (1 1 0 0 1) 2 = 1 2 4 + 1 2 3 + 0 2 2 + 0 2 1 + 1 2 0 = 16 + 8 + 0 + 0 1 = (25) 10 Methode 2: Horner-Schema (u) (u) b = b u i b i i i = ((... ((...(u (u n b+ n b+ u n-1 )b n-1 )b + u n-2 ) n-2 ) b +...... + u 2 )b 2 )b + u 1 )b 1 )b + u 0 = 0 (v) (v) c c wobei die die Basis b im im Zahlensystem zur zur Basis c ausgedrückt wird wird Beispiel: (1 1 0 0 1) 2 = 1 2 4 + 1 2 3 + 0 2 2 + 0 2 1 + 1 2 0 = u 4 u 3 u 2 u 1 u 0 (((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 13

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 = 4 8 +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) 14

Fortgesetzte Division mit Rest Gegeben: c-adische ganze Zahl Zahl y, y, neue Basis b Gesucht: b-adische Zahl Zahl x, x, so so dass gilt: gilt: (y) (y) c = c x i b i i i = (x) (x) b mit b mit 0 i i n Prinzip: Berechne nacheinander die die Divisionsreste x 0 0, x, 1 1... x... n wie n wie folgt: x 0 = 0 y mod modb x 1 = 1 (y (y div divb) b) mod modb x 2 = 2 ((y ((y div divb) b) div divb) b) mod modb...... x n = n ((( (((... y div divb) b) div divb) b)...... div divb) b) mod modb = 0 Die Die Reste ergeben dann in in umgekehrter Reihenfolge x n x n n-1 x n-1 x 2 x 2 1 x 1 0 aneinandergereiht 0 die die gesuchte Zahl Zahl x zur zur neuen Basis b. b. Probe: Durch Einsetzen in in die die Gleichung: (y) (y) c = c x i b i i i = (x) (x) c für c für 0 i i n Beispiel: (29) 10 (???) 2 29 : 2 = 14 Rest 1 = x 0 14 : 2 = 7 Rest 0 = x 1 7 : 2 = 3 Rest 1 = x 2 3 : 2 = 1 Rest 1 = x 3 1 : 2 = 0 Rest 1 = x 4 0, also fertig Das Ergebnis lautet: x 4 x 3 x 2 x 1, x 0 = ( 1 1 1 0 1 ) 2 15

Konvertierung: dezimal binär Beispiel: (2001) 10 (???) 2 z z div 2 z mod 2 2001 1000 1 = x 0 1000 500 0 = x 1 500 250 0 = x 2 250 125 0 = x 3 125 62 1 = x 4 62 31 0 = x 5 31 15 1 = x 6 15 7 1 = x 7 7 3 1 = x 8 3 1 1 = x 9 1 0 1 = x 10 z = (11111010001) 2 Man benutzt fortgesetzte Division mit Rest auch für die Umwandlung von Dezimalzahlen in Oktal- und Hexadezimalzahlen. 16

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: 2 C 7 3 (10110001110011) 2 = (10 1100 0111 0011) 2 = (2C73) 16 Gruppieren wir jeweils drei Ziffern einer Binärzahl und ordnen jeder Dreiergruppe die entsprechende Oktalziffer zu, so erhalten wir die Oktaldarstellung der Zahl. Beispiel: 2 6 1 6 3 (10110001110011) 2 = (10 110 001 110 011) 2 = (26163) 8 Anmerkungen: Eine Gruppe von 4 Bits nennt man auch ein Halb-Byte oder ein Nibble. Weitere gebräuchliche Schreibweisen für Hex-Zahlen sind: 61 16 = 61h = 0x61 17

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 = ( 10 16 2 + 11 16 1 + 12 16 0 ) 10 = ( 2560 + 176 + 12 ) 10 = (2748) 10 ( 1 0 1 0 1 0 1 1 1 1 0 0 ) 2 Kontrolle: 2 10 + 2 9 + 2 7 + 2 5 + 2 4 + 2 3 + 2 2 = 2048 + 512 + 128 + 32 + 16 + 8 + 4 = 2748 ( 5 2 7 4 ) 8 Kontrolle: 5 8 3 + 2 8 2 + 7 8 1 + 4 8 0 = 2560 + 128 + 56 + 4 = 2748 18

Grundrechenarten im Dezimalsystem Grundrechenarten a la Schularithmetik für Dezimalzahlen Addition mit Übertrag x = 1 2 6 0 3 1 5, 2 y = 1 2 7 1 4 2 3, 3 1 x + y = 2 5 3 1 7 3 8, 5 Multiplikation 1 4, 2 3 7, 4 2 4 2 6 0 0 9 9 4 0 5 6 8 1 1 1 1 2 1 5 3 1,0 8 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 Einmal-Eins. 19

Rechnen im Binärsystem Addition mit Übertrag binäres 1+1 + 0 1 0 0 1 1 1 10 1 0 1 0 1 + 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 Multiplikation 9 11 dezimal: 9 11 90 9 99 binär: 1001 1011 1001000 000000 10010 1001 1 1 binäres 1 1 0 1 0 0 0 1 0 1 1100011 20

Subtraktion Gegeben seien die beiden Zahlen Rechnen im Binärsystem a = a n a n-1... a 2 a 1 a 0 und b = b m b m-1... b 2 b 1 b 0. Gesucht ist die Zahl d = d n d n-1... d 2 d 1 d 0 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 Beispiel: 245 61 im Zehnersystem 245 61 1 Teilrechnung: 5 1 = (5 + 9) 10 = 14 10 = 4 4 6 = (4 + 4) 10 = 8 10 184 21

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???? μ1069 =>???? = 69???? 975 1000 25 Problem: Bei negativen Zahlen ist die Subtraktion von 1000 aufwändiger. Lösung: Rafinierte Darstellung von negativen Zahlen suchen.

Gegeben: die beiden binären Zahlen Subtraktion im Binärsystem a = a n a n-1... a 2 a 1 a 0 und b = b m b m-1... b 2 b 1 b 0 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 Beispiel: Berechne im Binärsystem die Differenz: 100 10 100 10 1 Teilrechnung: 0 0 = (0 + 10) 10 = 0 0 1 = (0 + 1) 10 = 1 10 010 23

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???? μ1011 =>???? = 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.

Rechnen im Binärsystem: Division Division 2 9 9 : 1 3 dezimal 2 9 9 : 1 3 = 2 3 2 6 3 9 3 9 0 binär 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 25

Multiplikation und Division durch Bitverschiebung Idee: Einige Programmiersprachen (C, Java,...) erlauben das Verschieben von Bits nach links bzw. nach rechts. Beispiel: Links-Shift-Operator << bzw. Rechts-Shift-Operator >> Verwende Verschiebeoperationen zum schnellen Multiplizieren u. Teilen und zwar: Beispiel: a << n entspricht einer Multiplikation mit 2 n a >> n entspricht einer Division durch 2 n 5<<3 = 5 * 2 3 = 40 00000000000000000000000000000101 -> 0000000000000000000000000101000 40 >> 3 = 40 / 2 3 = 5 0000000000000000000000000101000 -> 00000000000000000000000000000101 26

Darstellung ganzer positiver und negativer Zahlen Forderung: Darstellung eines Zahlbereiches A = { a n, a n +1,..., 2, 1, 0, 1, 2,,..., b m 1, b m } a n 0 b m 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-Darstellung Komplement-Darstellung (Zweier-Komplement, Einer-Komplement) 27

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 0100 = +4 1000 = -0 1100 = -4 0001 = +1 0101 = +5 1001 = -1 1101 = -5 0010 = +2 0110 = +6 1010 = -2 1110 = -6 0011 = +3 0111 = +7 1011 = -3 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! 28

Motivation Exzess-q-Darstellung Man möchte vermeiden, mit negativen Zahlen rechnen zu müssen. Idee Verschiebe den darzustellenden Zahlenbereich um einen Betrag q, so dass die kleinste darzustellende Zahl a n nicht mehr negativ ist. A = { a n, a n +1,..., -2, -1, 0, 1, 2,,..., b m -1, b m } a n 0 b m A' = { a n +q, a n +1+q,..., -2+q, -1+ q, 0+q, q+1, q+2,,..., q+ b m -1, q+b m } a n +q (= 0) q q+ b m 29

Beispiel Exzess-q-Darstellung 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 Bool 5. -16-16 + q = 0-15 -15 + q = 1 00000 00001 0-2 4-14 -14 + q = 2 00010... -2-2 + q = 14 01110-1 -1 + q = 15 01111 0 0 + q = 16 10000 q =16 0 1 1 + q = 17 10001 2 2 + q = 18 10010... 15 15 + q = 31 11111 31 2 4 1 30

Anmerkungen Exzess-q-Darstellung Meistens wählt man q = 2 m bei (m+1) verfügbaren Stellen im Binärwort. Der darstellbare Zahlenbereich ist dann: [ -2 m..., 0,..., + 2 m 1 ] Beispiel: m = 4 (also insgesamt 4+1 Bits für die Zahlendarstellung) => q = 2 4 = 16 => darstellbarer Zahlenbereich: [-16..., 0,..., +15] wird abgebildet auf: [0,..., 31] Darstellung der Zahl (3) 10 als (x) 2ex (3) 10 (3) 10 + (2 4 ) 10 = (00011) 2 + (10000) 2 = (10011) 2ex 31

Rechnen mit Zahlen in Exzess-q-Darstellung Beispiel Ausfü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 Überlauf 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. 32

Weitere Möglichkeiten zur Codierung von Zahlenbereichen 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 Bool 4 c Z : Z Bool 4 Welche Eigenschaften hat die Codierung c Z? 2 3-1 7 6 0111 0110 - Eineindeutigkeit der Codierung? 5 0101 - Symmetrie um 0?... - Schrittweite? 2 0010 - Konvertierbarkeit? 1 0001 - Eignung für arithmetische - Operationen ( + und )? 0 0-1 0000 1111 Eine wie c Z aufgebaute Codierung nennt man auch Zweierkomplement- Darstellung. -2 3-2... -8 1110 1000 33

Konvertierbarkeit: Zweierkomplement-Darstellung 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-9 -8-7 -6-5 -4-3 -2-1 0 1 2 3 4 5 6 7 8 9 => Es ergibt sich folgende Zuordnung: +0 0000 +4 0100-1 1111-5 1011 +1 0001 +5 0101-2 1110-6 1010 +2 0010 +6 0110-3 1101-7 1001 +3 0011 +7 0111-4 1100-8 1000 34

Zweier-Komplementdarstellung 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. -9-8 -7-6 -5-4 -3-2 -1 0 1 2 3 4 5 6 7 8 9 0000 1111 0001 1110 0010 1101 0011 1000 1001......... c(-z) = Komplement( c(z) ) + 1 0111 35

Zweier-Komplementdarstellung 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. -9-8 -7-6 -5-4 -3-2 -1 0 1 2 3 4 5 6 7 8 9 0000 1111 0001 1110 0010 1101 0011 1000 1001......... c(z) = Komplement(c(-z)) + 1 0111 36

Zweierkomplement-Darstellung im Zahlenring 0000 1111 0001-1 0 1110 1 0010 15-2 2 14 1101 0011-3 13 3 1100-4 12 Beachte: Die Zahlen sind modulo 16 in natürlicher Reihenfolge. 4 0100-5 11 5 0101 1011 10 6-6 9 0110 1010 8-7 7-8 1001 0111 1000 Ringdarstellung ist vorteilhaft, um die Eignung des Codes für die Durchführung arithmetischer Operationen (Addition) klar zu machen. 37

Arithmetik in der Zweier-Komplementdarstellung Beispiel: Zweierkomplementdarstellung der Zahl ( 6) 1. Bilde Binärdarstellung von 6, also 0110. 2. Bilde bitweises Komplement. 3. Addiere 1 auf das Bit-Komplement. 6 0110 1001 +0001 1010 Beispiel: Berechne ( 2-6 ) 1. Erzeuge -6 im Zweierkomplement. 2. Führe binäre Addition 2 + (-6) durch: 0010 + 1010 = 1100. 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. 38

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) 1100 1101 1011 1110 1010 4 3 5 1111 6 2 1001 0000 0001 1 0 1 0010 2 0011 3 7 4 0100 5 0101 6 7 0110 8 7 0111 1000 7 10 = 0111 2c Multiplikation / Division: - Zurückführung auf Addition. (Naiv, es gibt bessere Methoden.) -3 10 = 1101 2c 7 10 + -3 10 = 1 0100 2c 4 10 39

Eigenschaften der Zweierkomplement-Darstellung Darstellung des Zahlbereiches { -2 n-1,..., -1, 0, 1,..., 2 n-1-1 } -> B n unsymmetrisch zum Nullpunkt einfache Negation einer Zahl durch Kippen aller Bits und Addition von 1 1110 1111 1 0000 0 1 0001 0010 Subtraktion durch Addition des Komplements 1100 1101 3 4 2 2 3 4 0011 0100 Überlaufbehandlung: Reduktion mit mod 2 n, (d.h. durch Ignorieren des Überlaufs) 5 1011 6 1010 1001 7 8 7 5 0101 6 0110 0111 1000 40

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. 41

Ähnlichkeit der Darstellungsformen am Beispiel Die Zahl 77 10 soll mit 8 Bit dargestellt werden: (77) 10 = (0100 1101) 2 1100 1101 mit Vorzeichenbit Ohne Vorzeichenbit : 77 0100 1101 2 bitweise Komplementbildung Einerkomplement : 77 1011 0010 2 Zweierkomplement : 77 = 1011 0011 2c Addition von 1 Durch die Addition von 1 kann sich das Bitmuster jedoch auch an einer anderen Stelle ändern: Beispiel: Darstellung der Zahl 20 10 mit 8 Bit: 1001 0100 mit Vorzeichenbit Ohne Vorzeichenbit : 20 0001 0100 2 bitweise Komplementbildung Einerkomplement : 20 1110 1011 2 Zweierkomplement : 20 = 1110 0100 2c Addition von 1 42

Darstellung von gebrochenen Zahlen Die Ziffernfolge b n b n-1...b 1 b 0,c 1 c 2...c m-1 c m bezeichnet die folgende gebrochen Dezimalzahl: (z) 10 = b n 10 n + b n-1 10 n 1 +... + b 1 10 1 + b 0 10 0 + c 1 10 1 + c 2 10 2 +... + c m-1 10 (m 1) + c m 10 m Beispiel: 123,456 = 1 10 2 + 2 10 1 + 3 10 0 + 4 10 1 + 5 10 2 + 6 10 3 Analog können gebrochene Binärzahlen gebildet werden. Die Ziffernfolge b n b n-1...b 1 b 0,c 1 c 2...c m-1 c m bezeichnet dabei die folgende gebrochen Binärzahl: (z) 2 = b n 2 n + b n-1 2 n-1 +... + b 1 2 1 + b 0 2 0 + c 1 2-1 + c 2 2-2 +... +c m-1 2 -(m-1) + c m 2 -m Beispiel: 111,111 = 1 2 2 + 1 2 1 + 1 2 0 + 1 2 1 + 1 2 2 + 1 2 3 = 4 + 2 + 1 + ½ + ¼ + 1/8 = (7,875 ) 10 43

Konvertierung von Brüchen Zur 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.00110 0 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. 44

Weitere Beispiele Konvertierung von Brüchen gebrochene Binärzahl gebrochene Dezimalzahl 0.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/8 0.00011001100110011... 0.1 = 1/10 Umwandlung eines binären Bruchs in Dezimaldarstellung: (0.1011) 2 = (1011) 2 = (10000) 2 (11) 10 (16) 10 = (0.6875) 10 Ungenauigkeiten durch begrenzte Wortlänge (z.b nur 4 Bits): (0.1011) 2 = (1011) 2 = (1111) 2 (11) 10 (15) 10 = (0.73) 10 45

Konvertierung von Brüchen Potenz-Methode (dezimal -> binär): Beispiel: Umwandlung der Zahl +39,625 10 in das Dualsystem. Rest Zweierpotenz Dezimalwert Binärwert 39,625 5 32 1 = a 6 7,625 4 16 0 = a 4 7,625 3 8 0 = a 3 7,625 2 4 1 = a 2 3,625 1 2 1 = a 1 1,625 0 1 1 = a 0, 0,625-1 0,5 1 = a -1 0,125-2 0,25 0 = a -2 0,125-3 0,125 1 = a -3 0 Ergebnis: 39,625 10 = 100111,101 2 46

Konvertierung von nicht ganzen Zahlen Die Umwandlung einer nicht ganzen Dezimalzahl b n b n-1...b 1 b 0,c 1 c 2...c m-1 c m in eine Binärzahl kann mit der Quotient-Produkt-Methode erfolgen: 1. Der Teil b n b n-1...b 1 b 0 links vom Komma wird mit der fortgesetzten Division mit Rest umgewandelt. 2. Der Teil c 1 c 2...c m-1 c m 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 47

Konvertierung von Brüchen Quotient-Produkt-Methode (dezimal binär): Beispiel: Umwandlung der Zahl 39,625 10 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 48

Konvertierung von Brüchen Umwandlung der Zahl 39,625 10 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 49

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öschungseffekte 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 50

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 z = (-1) vz n-m-1 z i b i i = m 51

Gleitpunktzahlen (1) 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 ) : N A = 6.0221367 10 23 Planck sches Wirkungsquantum h = 6.6260755 10 34 => Statt Fixpunktzahlen verwendet man auf Computersystemen praktisch ausschließlich Gleitpunktzahlen. 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. 52

Gleitpunkt-Darstellung Komponenten der Gleitpunkt-Darstellung: vz mant b exp 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 m 1...m n interpretiert als: m 1 2 1 + m 2 2 2 +... + m n-1 2 (n 1) + m n 2 n 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: sign Charakteristik (Exponent : exp) Mantisse: mant 0 1 0 0 1 1 1 0 1 1 1 0 Beispiel: 12-Bit Wort 53

Konvertierung von Gleitpunktzahlen Dezimale 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 Zahlenwert 0 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. 54

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. Problem Eine Zahl x hat beliebig viele Gleitpunkt-Darstellungen. Beispiel: z = 0.00123 = 0.0123 10 1 = 0.123 10 2 =... 0.0000123 10 2... (Auch wenn nur n-bit-wörter zur Verfügung stehen, bleiben viele Varianten zur Auswahl.) Ziel Wähle ein normiertes (vereinheitlichtes) Format für Gleitpunktzahlen zur Basis 2 für ihre Darstellung in einem n-bitwort. 55

Normierte Gleitpunktzahlen Satz: Jedes x 0 besitzt genau eine Darstellung der Form: x = m 2 exp mit 1 m 2 (oder wahlweise 0 m 1) Normierte Darstellung Bei 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 = 1.m 1 m 2...m n-1 m n 2 exp Andere Möglichkeit der Normierung: Normiere so, dass für Mantisse gilt 0 m 1 und erste Ziffer nach dem Punkt eine 1 ist: z = 0.1m 2...m n-1 m n 2 exp 56

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. m 1 m 2... m n normierte Gleitpunktzahl mit Vorzeichen VZ, und Exponent exp stellt also folgenden Zahlenwert dar. (-1) VZ (1 + m 1 2 1 + m 2 2 2 +... + m n 2 n ) 2 exp Formal ist die Zahl 0 nicht normalisiert darstellbar, weil 0 0.1xxxx 2 exp Man interpretiert deshalb die kleinste darstellbare Gleitpunktzahl als 0.

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+38f kleinstmögliche positive Zahl: 1.40239846e-45f Datentyp double: 64 Bit breite Gleitkommazahl (nach IEEE 754-1985) größtmögliche positive Zahl: 1.79769313486231570e+308 kleinstmö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 58

Arithmetik mit Gleitpunkzahlen Seien z 1 und z 2 normierte GPZ mit z 1 = m 1 2 e1 und z 2 = m 2 2 e2 Vergleich von z 1 und z 2 z 1 < z 2 gdw. (e1 < e2) oder (e1 = e2 und m 1 < m 2 ) z 1 = z 2 gdw. (e1 = e2) und (m 1 = m 2 ) Addition: Sei z 1 z 2, somit e1 e2: erg = z 1 + z 2 = m 1 2 e1 + (m 2 2 e2 e1 ) 2 e1 Exponentenabgleich = (m 1 + m 2 2 e2 e1 ) 2 e1 Addition der Mantissen = m 2 e noch nicht normalisiertes Ergebnis Führe Normalisierung für erg = m 2 e durch: Falls (m 1 + m 2 2 e2 e1 ) < 2 dann: m := (m 1 + m 2 2 e2 e1 ) und e := e1 sonst: m := (m 1 + m 2 2 e2 e1 ) / 2 und e := e1 +1 59

Darstellbarer Zahlenbereich Beispiel: Gleitpunkt-Darstellung Die 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. Gleitpunktzahl mit 12 Bit Wortlänge: 0 1 0 0 1 1 1 0 1 1 1 0 VZ exp mant Vorzeichen: 1 Bit für Vorzeichen der Mantisse Exponent: 5 Bit für Exzess-q-Darstellung => Die größte positive Zahl ist 2 4 1 = 15. Interpretiert als Exponent zur Basis 2 ist exp somit 2 15. Mantisse: 6 Bit. mit 0 < mant < 1 ist die größte Mantisse: 1 2 m Die größte darstellbare Zahl ist (1 2 -m ) 2 q-1 = (1 2-6 ) 2 15. 60

Addition und Subtraktion mit Gleitpunkzahlen z 1 z 2 Konvertierung Konvertierung Normalisierung Normalisierung Exponent anpassen Exponent anpassen Addition Rückkonvertierung z 1 + z 2 61

Beispiel: Addition mit Gleitpunkzahlen Gegeben: z 1 = (-15.2) 10 und z 2 = (-5.75) 10 Gesucht: erg := z 1 + z 2 Ressource: 16 Bit Wörter: 9 Bit für Mantisse, 6 für Charakteristik, 1 VZ-Bit. Schritt 1: Konvertierung von z 1 und z 2 z 1 = (-15.2) 10 (-1111.0011 0011...) 2 z 2 = (-5.75) 10 (-101.11) 2 Schritt 2: Normalisieren von (z 1 ) 2 und (z 2 ) 2 ins Format: 1.m 1...m 9 2 e Schritt 2.1: Verschieben der Mantisse z 1 = (-1111.0011 0011...) 2 (-1.1110011 0011...) 2 2 3 z 2 = (-101.11) 2 (-1.0111) 2 2 2 Schritt 2.2: Exponenten in Exzess-q Format darstellen Mit 6 Bit für Charakteristik folgt: q = 2 6 1 = 2 5 = 32 Exponent von (z 1 ) 2 = (3) 10 + q = (3) 10 + (32) 10 = (35) 10 = (100011) 2 Exponent von (z 2 ) 2 = (2) 10 + q = (2) 10 + (32) 10 = (34) 10 = (100010) 2 62

Beispiel: Addition mit Gleitpunkzahlen Nach Schritt 2 sind z 1 = (-15.2) 10 und z 2 = (-5.75) 10 normalisiert und wie folgt als 16-Bitwörter abgelegt: (z 1 ) 2 = (z 2 ) 2 = 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 0 VZ exp mant 1 1 1 0 0 0 1 0 0 1 1 1 0 0 0 0 0 1 Schritt 3: Anpassung der Exponenten von (z 1 ) 2 und (z 2 ) 2, so dass Addition durchgeführt werden kann. Weil (z 1 ) 2 > (z 2 ) 2 wird der Exponent von (z 2 ) 2 angepasst: (z 2 ) 2 = (-1.0111) 2 2 2 ((-1.0111) 2 2 2 3 ) 2 3 = (-0.10111) 2 2 3 (z 2 ) 2 = 1 1 0 0 0 1 1 1 0 1 1 1 0 0 0 0 VZ exp mant 0 63

Beispiel: Addition mit Gleitpunkzahlen Schritt 4: Addition der Mantissen von (z 1 ) 2 + (z 2 ) 2 (z 1 ) 2 = 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 0 1 + VZ exp mant (z 2 ) 2 = 1 1 0 0 0 1 1 1 0 1 1 1 0 0 0 0 Zwischen -ergebnis 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 0 1 0 Schritt 5: Normalisierung des Ergebnisses (z 1 ) 2 + (z 2 ) 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. (z 1 +z 2 ) 2 = 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1 0 1 64

Beispiel: Addition mit Gleitpunkzahlen Schritt 6: Rückkonvertierung des Ergebnisses (z 1 +z 2 ) 2 in die Dezimal-Darstellung. (z 1 +z 2 ) 2 = 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1 0 Schritt 6.1: Bestimmung des Exponenten (100100) 2exzess -> (100100) 2exzess q = (000100) 2 = (4) 10 somit: (1.01001111) 2 2 4 = (10100.1111) 2 Schritt 6.2: Konvertierung von (10100.1111) 2 1 2 4 + 0 2 3 + 1 2 2 + 0 2 1 + 0 2 0 + 1 2-1 + 1 2-2 + 1 2-3 + 1 2-4 =(20.9375 ) 10 Schritt 6.3 Berücksichtigung des Vorzeichens: => Ergebnis lautet: - 20.9375 (exaktes Ergebnis wäre 20.95) 65

Arithmetik mit Gleitpunkzahlen Subtraktion: Im Prinzip wie Addition erg = z 1 -z 2 = z 1 + (- z 2 ) Addition einer negierten Zahl = m 1 2 e1 + (- (m 2 2 e2-e1 )) 2 e1 Exponentenangleichung = (m 1 + (- (m 2 2 e2-e1 )) 2 e1 Subtraktion der Mantissen (Zweierkomplement) = m 2 e Multiplikation: durch Multiplikation der Mantissen und Addition der Exponenten erg = z 1 z 2 = (m 1 m 2 ) 2 e1+e2 Beachte: Berechnung der Vorzeichen erfolgt separat! 66

Multiplikation von Gleitpunkzahlen z 1 z 2 Konvertierung Konvertierung Normalisierung Normalisierung Multiplikation Mantisse / Addition Exponent Normalisierung Rückkonvertierung z 1 z 2 67

Beispiel: ( 15.2) 10 ( 5.75) 10 =? Multiplikation von Gleitpunkzahlen Addition der 15.2 (1111.0011...) (1.1110011) 2 3 exp 2ex = 100011 Exponenten in 5.75 (101.11) (1.0111) 2 2 exp Exzess-q-Format 2ex = 100010 1 000101 Exzess 100000 Multiplikation der Mantissen m 1 m 2 : 1. 1 1 1 0 0 1 1 1. 0 1 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 1 1 0 0 1 1 1 1 10 101010 10 1 1 1 1 1 0.1 0 1 1 1 0 1 0 1 0 1 Exzess Exponentanpassung 100101 100000 (101) 2 = 5 10 mant abschneiden Rundungsfehler 68

Forderung im IEEE-Standard: Rundung 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 0 Rundung zum nächsten Gleitkommawert in Richtung + Rundung zum nächsten Gleitkommawert in Richtung - 69

Rundung bei Addition Rundung aufgrund eines auftretenden Übertrags und anschließender Normalisierung Beispiel: Basis 10, drei signifikante Stellen 2,34 10 2 (Übertrag) +8,51 10 2 ------------ 10,85 10 2 wird zu 1,08 10 3 gerundet Rundung im Zuge einer Exponentenanpassung Beispiel: Basis 10, drei signifikante Stellen IEEE-754 Normalisierung der Mantisse auf 1.xx 2,34 10 2 2,3400 10 2 +2,56 10 0 --Exponentenanpassung--> +0,0256 10 2 ------------------- 2,3656 10 2 wird zu 2,37 10 2 gerundet 70

Rundung bei Addition Rundung aufgrund eines Übertrag sowie einer Exponentenanpassung Beispiel: Basis 10, drei signifikante Stellen 9,51 10 2 +0,642 10 2 ---------------- 10,152 10 2 wird zu 1,02 10 3 gerundet. 71

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 Zahlen Beispiel: 1023 ( (10 9 +1) -1) liefert den Wert 0 1023 (10 9 +(1-1) ) liefert den Wert 1014!!! Fazit: Ergebnisse von Gleitpunktberechnungen können u.u. erheblich von dem exakten Wert abweichen!! 72

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). 73

Rechenungenauigkeiten mit fatalen Folgen 1996: Ariane 5 explodiert beim Testflug Grund: 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 Verletzte Grund: 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). 74

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 Calculator www.gdrc.org/uem/ co2-cal/co2-calculator.html - Was bedeutet hier NaN? 75

Online-Quellen zum Üben: Umwandlung binär <-> dezimal und andere http://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 Zahlen http://math.hws.edu/tmcm/java/datareps/index.html 76