Zahlendarstellung Zahlen und ihre Darstellung in Digitalrechnern Grundstrukturen: Speicherorganisation und Zahlenmengen Linear organisierter Speicher zu einer Adresse gehört ein Speicher mit 3 Bit-Zellen ( Wort breit ) adresse Linearer Speicher bit MSB 3 4 3 6 5 8 7 LSB Halbwort byte Grundstrukturen: Speicherorganisation und Zahlenmengen Zahlenmengen (N o Z Q R C) natürliche Zahlen ganze Zahlen = natürliche Zahlen und negative ganze Zahlen rationale Zahlen = ganze Zahlen und gebrochene zahlen reelle Zahlen = rationale Zahlen und irrationale Zahlen komplexe Zahlen = reelle Zahlen und echt imaginäre Zahlen
Ganzzahlendarstellung Basis-Zahlendarstellung: zahl = a i b n i= die Basis b ist aus den natürlichen Zahlen die Ziffer a i ist aus den natürlichen Zahlen a i b- die Darstellung ist eindeutig Schreibweise: zahl = (a n... a ) b Beispiel: (4) = 3 + + + 4 gebräuchliche Zahlenbasen: (Binär-System) 8 (Oktal-System) (Dezimal-System) 6 (Hexadezimal-System) i Multiplikation/Division mit b: shift der Zahl-Ziffernfolge um Stelle nach links/rechts Ganzzahlendarstellung Konvertierung zwischen zwei Basen: n i n zahl = ai b = anb + an i= n n zahl = ( L( a b + a ) b + K) b + a n b + K+ a b + a ( Horner-Schema) Basis b Basis Eingabe: b, Feld a[..k] Ausgabe: Dezimalzahl vorwärts: von links nach rechts Basis Basis b Eingabe: Dezimalzahl, neue Basis b Ausgabe: Feld a[..k] (neue Ziffernfolge) rückwärts: von rechts nach links zahl := ; FOR i:=n TO BY - DO; zahl := zahl b + a[i] END; i := ; a[i] := ; WHILE zahl> DO a[i] := zahl MOD b; zahl := zahl DIV b; i := i+ END;
Ganzzahlendarstellung Konvertierung zwischen zwei Basen: (cont d) Beispiel: (36) 8 (?) 3 Schritt : (36) 8 Dezimalzahl n = : (36) 8 = (( 8 + ) 8 + 3 ) 8 + 6 = 58 = (58) Schritt : Dezimalzahl (?) 3 b = 3 (58) : 58 / 3 = 5 Rest 5 / 3 = 7 Rest 7 / 3 = 5 Rest 5 / 3 = Rest / 3 = Rest also: (58) = (((( 3 + ) 3 + ) 3 + ) 3 + ) 3 + = () 3 wobei: (... ) = 5, (... ) = 7, (... ) = 5, (... ) =, Ganzzahlendarstellung Spezialfall: Konvertierung zwischen Basen k : von rechts nach links: Zusammenfassen von jeweils k benachbarten Ziffern Beispiel mit der Zahl (3) : Die Darstellung zur Basis b= soll in die zur Basis b=8 umgewandelt werden, d.h. k=3: ( ) 8 7 6 5 4 3 = + + + + + 6 3 = ( + + ) + ( + ) + ( + + ) = 4 8 + 5 8 + 4 8 = (454) 8 Spezialfall: Konvertierung zwischen Basen k : selbst nachdenken! 3
Negative Zahlen im Binärsystem (Dualsystem) Allgemeines Die Anzahl der darstellbaren Zahlen ist beschränkt! (abhängig von der Wortlänge) Wortlänge = 8bit N = 8 = 56 versch. /-Kombinationen 56 verschiedene Zahlen darstellbar, z.b.... 55 (= N - ) Unser Rechner kann nur addieren, besitzt lediglich ein Addierwerk, kein Subtrahierwerk; letztlich heisst das, auch Multiplikationen und Divisionen muss das Addierwerk erledigen! Frage: Kann man sich im Bereich der Dezimalzahlen einen Algorithmus vorstellen, der mittels Addition eine Subtraktion durchführt? (unter der Nebenbedingung, dass die Anzahl der darstellbaren Zahlen beschränkt ist) Idee: falls x >, dann nix: x x falls x <, dann: x N - x Negative Zahlen im Binärsystem (Dualsystem) 4 Möglichkeiten der Darstellung Vorzeichen und Betrag ( signed magnitude ) das fällt einem sofort ein: nehme das Bit ganz links als Vorzeichen: + ; die restlichen Bits stellen den Betrag der Zahl dar. Beispiel: Wortlänge n = 4 Bit N = 4 = 6 versch. /-Kombinationen 6 verschiedene Zahlen darstellbar, bisher (kardinal)... 5 (= N - ), jetzt (integer) -7... +7, also -( n- - )... +( n- - ) Problem : es gibt zwei Nullen: + ; - also: Eine Zahl aber zwei unterscheidbare(!) Bitfolgen Problem : Bei dieser Darstellung ist eine Addierwerk und ein Subtrahierwerk notwendig; es gibt keinen Algorithmus der Subtraktion per Addition erledigt für diese Darstellung. Problem 3: Es ist eine Logik erforderlich zur Entscheidung ob Addition oder Subtraktion auszuführen (4 Vorzeichenfälle) 4
Negative Zahlen im Binärsystem (Dualsystem) 4 Möglichkeiten der Darstellung (cont d) Einer-Komplement (One s Complement) gebildet durch stellenweises Invertieren der Originalzahl:, addiert man zur Originalzahl ihr Einer-Komplement (= Invertierte) so ergibt sich immer eine Folge von Einsen. Eine Folge von Einsen ist nichts anderes als (die Invertierte der) Null, also - (+ Folge von Nullen), d.h. man hat zur Originalzahl deren Negatives addiert. Beispiel: Wortlänge n = 4 Bit N = 4 = 6 versch. /-Kombinationen 6 verschiedene Zahlen darstellbar, bisher (kardinal)... 5 (= N - ), jetzt (integer) -7... +7, also -( n- - )... +( n- - ) Problem besteht noch: es gibt zwei Nullen: + ; - also: Eine Zahl aber zwei unterscheidbare(!) Bitfolgen Problem ist gelöst: Bei dieser Darstellung genügt ein Addierwerk; Subtraktion bedeutet Addition des Negativen. Problem 3 (Logik) stellt sich nicht mehr. Problem 4: = -4 oder +?? durch beschränkten Zahlenbereich -7.... +7 gelöst. Bit ganz links: negative Zahl, positive Zahl Negative Zahlen im Binärsystem (Dualsystem) 4 Möglichkeiten der Darstellung (cont d) Zweier-Komplement (Two s Complement) gebildet durch das Einer-Komplement mit nachfolgender Addition von addiert man zur Originalzahl ihr Zweier-Komplement (= Invertierte + ) so ergibt sich immer eine mit nachfolgenden Nullen; die Anzahl der Stellen ist um eine gewachsen. Streicht man die führende, so sind die nachfolgenden Nullen nichts anderes als Null, man hat zur Originalzahl deren Negatives addiert. Beispiel: Wortlänge n = 4 Bit N = 4 = 6 versch. /-Kombinationen 6 verschiedene Zahlen darstellbar, bisher (kardinal)... 5 (= N - ), jetzt (integer) -8... +7, also -( n- )... +( n- - ) Problem besteht nicht mehr: ; - Problem ist gelöst: Bei dieser Darstellung genügt ein Addierwerk; Subtraktion bedeutet Addition des Negativen. Problem 3 (Logik) stellt sich nicht mehr. Problem 4: = -5 oder +?? durch beschränkten Zahlenbereich -8.... +7 gelöst. Bit ganz links: negative Zahl, positive Zahl 5
Negative Zahlen im Binärsystem (Dualsystem) 4 Möglichkeiten der Darstellung (cont d) Zweier-Komplement (cont d) übrigens: Im Zweier-Komplement stimmt die Dualdarstellung von -5 mit der von 4-5 = 6-5 = überein: (5) = () Zweier-Komplement von (5) : () + = () = () Beispiel mit Dezimalzahlen (b = ): Es sei n = N = = verschiedene Dezimalzahlen, entweder kardinal... 99 (= N - ) oder (integer) -5... +49, also -5 n-... + 5 n- - Originalzahl sei (z.b.): 3 Ihr Zehner-Komplement: - 3 = 77. 77 ist nicht im Zahlenbereich -5... +49; 77 ist die Darstellung von -3 im Zehner-Komplement (x<: x N - x ). addiert man zur Originalzahl ihr Zehner-Komplement, so ergibt sich immer eine mit nachfolgenden Nullen (hier ); die Anzahl der Stellen ist um eine gewachsen. Streicht man die führende, so sind die nachfolgenden Nullen nichts anderes als Null, man hat zur Originalzahl deren Negatives addiert, also eine Darstellung von -3. Statt (z.b) 36-3 = 3 kann man auch rechnen: 36 + 77 = 3 Statt (z.b) 4-3 = - 9 kann man auch rechnen: 4 + 77 = 9 = - 9 Negative Zahlen im Binärsystem (Dualsystem) 4 Möglichkeiten der Darstellung (cont d) Zweier-Komplement (cont d) häufigst genutzte rechnerinterne Darstellung negativer ganzer Zahlen. Beispiel mit Dualzahlen (b = ): Dual zu berechnen: 85-3 = -8 (85) = () Es sei n = 8 N = 8 = 56 verschiedene Dezimalzahlen: -8... +7 Aus der Subtraktion -3 soll eine Addition werden: Originalzahl ist: (3) = () Ihr Zweier-Komplement: + =. Subtraktion Addition: + = Anzahl der Stellen nicht gewachsen Keine Streichung der führenden, die ganz links zeigt ein negatives Ergebnis, d.h. Ergebnis liegt als Zweier-Komplement vor Übersetzung = Bildung Zweier-Komplement: + = = (8) Das negative Ergebnis lautet -8 6
Negative Zahlen im Binärsystem (Dualsystem) 4 Möglichkeiten der Darstellung (cont d) Exzess n- der gesamte darstellbare Zahlenbereich (positive und negative Halbachse) wird auf die positive Halbachse abgebildet exzess-zahl = zahl + n- Beispiel mit n = 8, d.h. Exzess = Shift = 8- = 7 (-3) -3 + 8 = (5) = () Die Darstellungen sind mit denjenigen der Zweier-Komplement- Darstellung bis auf das invertierte linke Bit ( Vorzeichen ) identisch Negative Zahlen im Binärsystem (Dualsystem) Vergleich der 4 Systeme (n=4) Dual Vorz./Betrag Einer-Kompl. Zweier-Kompl. Exzess + + 8 + + + 7 + + + 6 + 3 + 3 + 3 5 + 4 + 4 + 4 4 + 5 + 5 + 5 3 + 6 + 6 + 6 + 7 + 7 + 7 7 8 6 7 + 5 6 + 3 4 5 + 3 4 3 4 + 4 5 3 + 5 6 + 6 7 + 7 7
Negative Zahlen im Binärsystem (Dualsystem) Zahlenring (n=8) für Dualzahlen und Zweier-Komplement Gleitkommazahlen: Darstellung und Arithmetik Gleitkommazahlen Zahlenmenge rationale Zahlen: r = a/b b r=a/b a Zahlenstrahl reelle Zahlen: Hinzunahme von nicht-rationalen Zahlen: π, e, Die reellen Zahlen in ihrer mathematischen Bedeutung stellen ein Kontinuum dar (jedes beliebig große Intervall auf dem Zahlenstrahl enthält unendlich viele Werte) 8
Gleitkommazahlen Zahlenmenge (cont d) Wertebereich REAL (Gleitkommazahlen) im Rechner stellt eine endliche Menge von Repräsentanten von Intervallen des Kontinuums dar. Diskretisierung numerische Darstellung Verarbeitung von Daten des Typs REAL nicht exakt ( numerische Mathematik) Gleitkommazahlen mathematisch reelle Zahlen mathematisch rationale Zahlen Gleitkommazahlen Zahlendarstellung (Konrad Zuse, 937) zahl = m b m : Mantisse, -M < m < +M Normalform: /b m < oder m = b : Basis, z.b., aber auch kleine Potenz von :, 4, 8, 6 e : Exponent, -E e +E, auch -E e +E alle Werte M, b, E sind rechnerabhängig Aufbau: zahl = ±.a a...a µ b e e. = / = /b ist kleinstmöglicher Mantissenbetrag! Warum? Der nächstkleinere Zahlenbetrag wäre:.99-99 wegen normierter Darstellung:.99-99.99 - Das ist unmöglich wegen zweiziffrigem Exponent! mit a (normalisierte Darstellung) und a i b- Beispiel: b =, Mantisse m: 3 Ziffern, Exponent e: Ziffern Mantisse: / m < oder Exponent: -99 e +99 darstellbarer Bereich:.999 99.... -99 +. -99... +.999 99 Multiplikation/Division mit b: shift der Zahl-Ziffernfolge um Stelle nach links/rechts oder e e+ / e e- 9
Gleitkommazahlen Die Mantisse ist somit um Bit länger als gedacht, weil a nicht gespeichert werden muss! Normalisierung Darstellung der Mantisse in Normalform: /b m < eine Mantisse mit gesetztem Führungsbit a heisst normalisiert zahl = ±.a a...a µ b e mit a = durch die Normalisierung wird die Gleitpunktdarstellung eindeutig Rechnerinterne Repräsentation der verfügbare Platz (hier Byte) wird in Felder aufgeteilt 5 8 7 Vorzeichen Exponent Mantisse Für arithmetische Operationen muss bei hardwaremäßiger Realisierung hoher Aufwand betrieben werden, daher Software-Realisierung Spezialprozessoren Leistungsdaten: MIPS, FLOPS Gleitkommazahlen Beispiel einer 3 Byte breiten Zahlendarstellung (Basis b = ) Vorzeichen Exponent 3 5 6 Mantisse Vorzeichen:, also + Exponent e: Breite: 7 Bit Exzess 64(= 7- ) - Darstellung () = (84) 84-64 = b e = = 48576 Mantisse m: Breite: 6 Bit Darstellung der Mantisse: 6 a j j= m = j = = ( + 4 = 7 6 Zahl: zahl = + 7-6 = + 43 3 + 3 5 + 6 ) 6
Gleitkommazahlen Beispiel (cont d) Normalisierung: zahl = = 3 4 5 6 ( + ) 3 4 ( ( + 5 = ( + 9 3 4 5 Vorzeichen: bleibt, also + Exponent e: Breite: 7 Bit Exzess 64(= 7- ) - Darstellung 9 + 64 = 73 (73) = () Exponent e um dekrementiert Mantisse m: Breite: 6 Bit Mantisse um Bit nach links geschoben ) ) Vorzeichen Exponent Mantisse Zahl bleibt erhalten: zahl = + 7-5 9 = + 43 Gleitkommazahlen REAL-Zahlen auf dem Zahlenstrahl Beispiel: b =, Mantisse m: 3 Ziffern, Exponent e: Ziffern negative overflow negative underflow NULL 99 -.999 -.999 99 ausdrückbare negative Zahlen positive underflow ausdrückbare positive Zahlen - -. -99 +. -99 + positive overflow jede REAL-Zahlen repräsentiert ein Intervall der reellen Zahlen; das Intervall wächst mit zunehmendem Betrag der Zahl, d.h. die Dichte der Repräsentation nimmt mit zunehmendem Betrag der Zahl ab. Eine Abschätzung des Einflusses der Ungleichverteilung der Repräsentanten auf die rechenoperationen ist nicht trivial. Behandlung von overflow/underflow, Null, undefiniert? IEEE Floating-Point Standard 754 (985) (siehe A.S. Tanenbaum)
Gleitkommazahlen Probleme Test: Assoziativgesetz (Beispiel mit 4-stelliger Arithmetik) x = 9.9, y =., z = -.999 (x+y) + z =.9 + (-.999) = 9.9 x + (y+z) = 9.9 +. = 9.9 Test: Distributivgesetz (Beispiel mit 4-stelliger Arithmetik) x =., y = -5., z = 5. (x y) + (x z) = (-55) + 55 =. x (y+z) =.. =. Auslöschung Bei der Subtraktion zweier fast gleich großer Werte heben sich die signifikanten Ziffern auf und die Differenz verliert dadurch an Signifikanz (z.b. Differenzenquotient) Überlaufgefahr... bei Division durch kleine Werte Gleitkommazahlen Rechnerarithmetik x = m, y = m x Addition e e x y y x + y = ( m Subtraktion x y = ( m Multiplikation x x ex ey ex ey x y = ( m x m y ) Division + m m e x + e y x y = ( m x m y ) y y e x e y ) ) ey ey falls falls e e x x e e y y