Inhalt Grundzüge der Informatik Tutorium Gruppe 6 Termin 5 – 07.12.2006 Apfelthaler Kathrin Einführung Numerik Fest- und Gleitpunktdarstellung Test-Beispiel [email protected] Apfelthaler Kathrin, Dezember 2006 Numerik Festpunkt-Darstellung Berechnung unter Verwendung reeller Zahlen (oder deren Nährung) = numerische Berechnung Festpunkt-Darstellung Gleitpunkt-Darstellung Feste Anzahl von Nachkommastellen V VZ g n Betrag N = n + g + 1 (-1)v * 2-n ∑ [j=0,N-2] dj * 2i Apfelthaler Kathrin, Dezember 2006 Apfelthaler Kathrin, Dezember 2006 Festpunkt-Darstellung Bsp Festpunkt-Darstellung Bsp N = 12 Bit, n = 3 Bit (1001 1000 1110)2 = 1 001 1000 1 VZ g Vorkommateil: 110 n 1 · 20 = 0 · 21 = 0 · 22 = 0 · 23 = 1 · 24 = 1 · 28 = 0 · 29 = 0 · 210 = 1 001 1000 1 VZ g 1 0 0 0 16 32 0 0 110 n —— 49 Apfelthaler Kathrin, Dezember 2006 Apfelthaler Kathrin, Dezember 2006 1 Festpunkt-Darstellung Bsp Nachkommateil: 0 · 20 = 0 1 1 · 21 = 2 VZ 2 1·2 = 4 —— 6 : 23 = 0.75 Festpunkt-Darstellung Bsp 2 001 1000 1 g 110 n N = 12 Bit, n = 3 Bit (-10.375)10 = Vorkommateil: • • • • (1001 1000 1110)2 = (-49.75)10 10 : 2 = 5 5:2=2 2:2=1 1:2=0 0 Rest 1 Rest 0 Rest 1 Rest • (10)10 = (1010)2 Apfelthaler Kathrin, Dezember 2006 Festpunkt-Darstellung Bsp 2 N = 12 Bit, n = 3 Bit (-10.375)10 = Nachkommateil: • 0.375 * 2 = 0.75 • 0.75 * 2 = 1.5 • 0.5 * 2 = 1 Apfelthaler Kathrin, Dezember 2006 Festpunkt-Darstellung Bsp 2 N = 12 Bit, n = 3 Bit (-10.375)10 = (1010.011)2 1 00001010 VZ g 0 1 1 011 n • (0.375)10 = (0.011)2 Apfelthaler Kathrin, Dezember 2006 Festpunkt-Darstellung Zahlen haben konstanten Abstand 2-n Reservierung von n Bit für Nachkommastellen → Intervall zwischen größter und kleinster Zahl sehr klein Probleme treten auf bei Darstellung von großen ganzen Zahlen (→ Reduktion der Nachkommastellen) kleinen Zahlen (→ Reduktion der Vorkommastellen) Apfelthaler Kathrin, Dezember 2006 Apfelthaler Kathrin, Dezember 2006 Gleitpunkt-Darstellung Skalierungsparameter wird nicht fixiert, sondern ist veränderbar Darstellung von Zahlen, die betragsmäßig sehr groß UND sehr klein sein können Darstellung: +/- Mantisse * Basis +/- Exponent • emin = kleinster Exponent • emax = größter Exponent Apfelthaler Kathrin, Dezember 2006 2 Normalisierte Gleitpunktzahl Dieselbe Zahl kann auf verschiedene Weisen dargestellt werden: - 123 * 10-7 = -12.3 *10-6 Normalisierung: Normalisierte Gleitpunktzahl Zahl Null nicht mehr darstellbar Sonderdarstellung: • 1.00 * bemin-1 Mantisse verfügt über 1 Vorkommastelle, die ungleich „0“ ist • Bsp: -1.23 * 10-5 Problem: einige Zahlen sind aufgrund der Normalisierung im Intervall nicht mehr darstellbar Apfelthaler Kathrin, Dezember 2006 Denormalisierte Gleitpunktzahl Subnormale Zahlen m0 (1.Stelle der Mantisse) = 0 für e = emin Apfelthaler Kathrin, Dezember 2006 Normalisierung Exponent wird solange verkleinert / vergrößert, bis Mantisse die Normalisierungsbedingung erfüllt 0.10 * 22 = 1.00 * 21 Exponent muss dabei im vorgegebenen Intervall bleiben Exponent größer als emax = Überlauf Exponent kleiner als emin = Unterlauf Apfelthaler Kathrin, Dezember 2006 Struktur Anzahl der Gleitpunktzahlen Parameter: Basis (b>= 2) Mantissenlänge (p >= 2) Kleinster Exponent (emin < 0) Größter Exponent (emax > 0) Normalisierungsindikator denorm {true,false} Schreibweise Apfelthaler Kathrin, Dezember 2006 F(b,p,emin,emax,denorm) Apfelthaler Kathrin, Dezember 2006 Normalisierte Zahlen: Denormalisierte Zahlen: 1 + 2 * (b – 1) * bp-1 * (emax – emin + 1) 2 * (bp-1 - 1) Größte Gleitpunktzahl: Kleinste Gleitpunktzahl: b * (1-b-p) * bemax bemin Apfelthaler Kathrin, Dezember 2006 3 Abstände Benachbarte Zahlen haben konstanten Abstand: be-p+1 = 1 ulp * be Codierung • ulp = unit of last position (Mantisse: Wert einer Einheit der letzten Stelle) VZ EXPONENT MANTISSE Exponent: in Exzessdarstellung Zahlen mit neg. Exponenten scheinen wegen führendem Vorzeichen im Exponenten größer als Zahlen mit pos. Vorzeichen → Exzessdarstellung behebt dieses Problem Grundformate: Single bzw. Double Format Apfelthaler Kathrin, Dezember 2006 Implizites erstes Bit 1.Stelle der Mantisse muss aufgrund der Normalisierungsbedingung „1“ sein (nur bei Basis = 2) Diese Stelle wird nicht codiert. (→ Einsparung einer Mantissenstelle) Apfelthaler Kathrin, Dezember 2006 Rundung Jeder reellen Zahl wird eine Maschinenzahl zugeordnet Rundung zum nächstgelegenen Wert Apfelthaler Kathrin, Dezember 2006 Rundung „überzählige“ Mantissenstellen werden abgeschnitten Gerichtetes Runden (directed rounding) Apfelthaler Kathrin, Dezember 2006 Rundungsfehler Abschneiden (truncate) Round away from zero: Nachbar, der weiter weg liegt von Null, wird gewählt Round to even: Nachbar, dessen letzte Mantissenstelle gerade ist, wird gewählt Absoluter Rundungsfehler Relative Rundungsfehler ε (x) = ε□(x) = □x - x p(x) = (□x – x) / x = ε (x) / x x = min(x1,x2) bzw. x = max(x1,x2) Apfelthaler Kathrin, Dezember 2006 Apfelthaler Kathrin, Dezember 2006 4 Gleitpunktdarstellung Codierung Schritt 1: Konvertierung der Zahl Schritt 2: Normalisierung Schritt 3: Exponent bilden Schritt 4: Vorzeichenbit Gleitpunktdarstellung Codierung Codierung der Zahl (-172.625)10 in das Gleitpunktsystem F(2,24,-126,127,true) Vorkommateil umwandeln: Apfelthaler Kathrin, Dezember 2006 Gleitpunktdarstellung Codierung Nachkommateil umwandeln: 0.625 * 2 = 1.25 0.25 * 2 = 0.5 0.5 * 2 = 1 (0.625)10=(101)2 Schritt 2: Normalisierung (10101100.101)2 * 20 = (1.0101100101)2 * 27 (172)10=(10101100)2 Gleitpunktdarstellung Codierung Codierung der Zahl (-172.625)10 in das Gleitpunktsystem F(2,24,-126,127,true) Apfelthaler Kathrin, Dezember 2006 0 Rest 0 Rest 1 Rest 1 Rest 0 Rest 1 Rest 0 Rest 1 Rest Apfelthaler Kathrin, Dezember 2006 →1 →0 →1 Gleitpunktdarstellung Codierung 172 : 2 = 86 86 : 2 = 43 43 : 2 = 21 21 : 2 = 10 10 : 2 = 5 5:2=2 2:2=1 1:2=0 (-172.625)10=(10101100.101)2 Apfelthaler Kathrin, Dezember 2006 Gleitpunktdarstellung Codierung Schritt 3: Exponent berechnen Exponent = Exzess + Exponent der normalisierten Darstellung Exponent = 127 + 7 = 134 0111 1111 = (127)10 0000 0111 = (7) 10 1000 0110 = (134)10 Apfelthaler Kathrin, Dezember 2006 Apfelthaler Kathrin, Dezember 2006 5 Gleitpunktdarstellung Codierung Schritt 4: Vorzeichenbit Positive Zahlen: MSB = 0 Negative Zahlen: MSB = 1 (-137,625)10 → MSB = 1 Gleitpunktdarstellung Codierung Codierung von (-172,625)10 = (-10101100,101)2 VZ = 1 Exponent = 1000 0110 Mantisse = 1.0101100101 VZ Exponent Mantisse 1 1000 0110 01011001010000000000000 Apfelthaler Kathrin, Dezember 2006 Guard, Round, Sticky Bit Hilfestellen, um eventuelle numerische Ungenauigkeiten beim Runden gering zu halten Sticky Bit bleibt „1“, sobald es einmal den Wert „1“ hat Apfelthaler Kathrin, Dezember 2006 Guard, Round, Sticky Bit G R S Ergebnis 0 x x unverändert 1 1 x Ergebnis +=1 1 0 0 1 0 1 lsb=0: unverändert lsb=1: Ergebnis +=1 VZ gleich: Ergebnis +=1 VZ unterschiedl.:unverändert Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Addition / Subtraktion Schritt 1: Exponenten der betragsmäßig kleineren Zahl an den Exponenten der größeren Zahl angleichen Schritt 2: Die beiden Mantissen addieren Schritt 3: Die Summe normalisieren Schritt 4: Runden Apfelthaler Kathrin, Dezember 2006 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp Zahl A: (5.52)10, Zahl B: (62.52)10, Zahl C: (58.56)10 Gesucht: A + B, B - C Apfelthaler Kathrin, Dezember 2006 6 Gleitpunktarithmetik Bsp Zahl A: (5.52)10 5:2=2 2:2=1 1:2=0 1 Rest 0 Rest 1 Rest • (101)2 = (5)10 Gleitpunktarithmetik Bsp Zahl A: (5.52)10 Mantisse = 10 Stellen Vorkommastellen = 3 Nachkommastellen → 7 0.52 * 2 = 1.04 0.04 * 2 = 0.08 0.08 * 2 = 0.16 0.16 * 2 = 0.32 0.32 * 2 = 0.64 0.64 * 2 = 1.28 0.28 * 2 = 0.56 • (101.1000010)2 = (5.52)10 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp Zahl B: (62.52)10 62 : 2 = 31 31 : 2 = 15 15 : 2 = 7 7:2=3 3:2=1 1:2=0 0 Rest 1 Rest 1 Rest 1 Rest 1 Rest 1 Rest • (111110)2 = (62)10 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp Zahl Zahl C: (58.56)10 58 : 2 = 29 29 : 2 = 14 14 : 2 = 7 7:2=3 3:2=1 1:2=0 0 Rest 1 Rest 0 Rest 1 Rest 1 Rest 1 Rest • (111010)2 = (58)10 Mantisse = 10 Stellen Vorkommastellen = 6 Nachkommastellen → 4 Apfelthaler Kathrin, Dezember 2006 →1 →0 →0 →0 • (111110.1000)2 = (62.52)10 Apfelthaler Kathrin, Dezember 2006 B: (62.52)10 0.52 * 2 = 1.04 0.04 * 2 = 0.08 0.08 * 2 = 0.16 0.16 * 2 = 0.32 Mantisse = 10 Stellen Vorkommastellen = 6 Nachkommastellen → 4 Gleitpunktarithmetik Bsp →1 →0 →0 →0 →0 →1 →0 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp Zahl C: (58.56)10 0.56 * 2 = 1.12 0.12 * 2 = 0.24 0.24 * 2 = 0.48 0.48 * 2 = 0.96 →1 →0 →0 →0 • (111010.1000)2 = (58.56)10 Apfelthaler Kathrin, Dezember 2006 7 Gleitpunktarithmetik Bsp NORMIERUNG • 101.1000010 * 20 = 0.1011000010 * 23 • 111110.1000 * 20 = 0.1111101000 * 26 Gleitpunktarithmetik Bsp • EXPONENT: Exzess + Exponent der normalisierten Darstellung • (16) 10000 (16) 10000 (3) 00011 (6) 00110 10011 10110 • 111010.1000 * 20 = 0.1110101000 * 26 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp • EXPONENT: (2.Weg) (3) 00011 (6) 00110 10011 10110 1.Bit („1“)= Vorzeichen des Exponenten (1: positiv, 0: negativ), Rest= Betrag der Zahl Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp • VORZEICHENBIT setzten: • Positiv → MSB = 0 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp A = 5.52 = B = 62.52 = C = 58.56 = 0 10011 1011000010 0 10110 1111101000 0 10110 1110101000 Apfelthaler Kathrin, Dezember 2006 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp Addition / Anpassung der Exponenten A = 0 10011 1011000010 (3) B = 0 10110 1111101000 (6) Differenz der Exponenten = 6-3= 3 Exponent zur größeren Zahl anpassen Mantisse der kleineren Zahl anpassen Apfelthaler Kathrin, Dezember 2006 8 Gleitpunktarithmetik Bsp ADDITION Gleitpunktarithmetik Bsp g r s A = 0 10110 0001011000 0 1 0 B = 0 10110 1111101000 0 10110 10001000000 0 1 0 Ergebnis normieren 0 10111 1000100000 0 0 1 Nach Normalisierung (6) (6) Apfelthaler Kathrin, Dezember 2006 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp Subtraktion /Anpassung der Exponenten B = 0 10110 1111101000 (6) C = 0 10110 1110101000 (6) g r s 0 10111 1000100000 0 0 1 Tabelle: Fall 1: g=0 Ergebnis unverändert Gleitpunktarithmetik Bsp Exponenten bereits angepasst Apfelthaler Kathrin, Dezember 2006 Subtraktion B = 0 10110 1111101000 0 0 0 C = 0 10110 1110101000 0 0 0 0 10110 0001000000 0 0 0 Ergebnis normieren 0 10011 1000000000 0 0 0 Apfelthaler Kathrin, Dezember 2006 Gleitpunktarithmetik Bsp Nach Normalisierung g r s 0 10011 1000000000 0 0 0 Tabelle: Fall 1: g=0 Danke für die Aufmerksamkeit! Ergebnis unverändert Apfelthaler Kathrin, Dezember 2006 9