Numerik Ablauf: Festpunkt-Darstellung Gleitpunkt-Darstellung Runden Addition/Subtraktion Multiplikation Ausblick und Zusammenfassung Wolfgang Kastner, Institut für Rechnergestützte Automation, TU Wien Festpunkt-Darstellung VZ v Vorkomma dn+g-1 dn+g-2 … … dn dn-1 Nachkomma d1 … … d0 • n Nachkommastellen • g Vorkommastellen • 1 Vorzeichenbit (1 bei negativer Zahl) ⇒ Zahl x ist N = n + g + 1 Bit breit N-2 • x = (-1)v ·2-n ·∑ dj ·2j j=0 = (-1)v dN-2 …dn . dn-1 … d1 d0 1 Festpunkt-Zahlensystem • N = 12 Bit, n = 3 Bit Nachkommastellen • (1001 1000 1110)2 ⇔ (-49.75)10 VZ v 1 d10 0 d9 0 d8 1 Vorkomma d7 d6 1 0 d5 0 d4 0 d3 1 Nachkomma d2 d1 d0 1 1 0 Festpunkt-Zahlensystem • N = 12 Bit, n = 3 Bit Nachkommastellen • (-10.375)10 ⇔ ( 1010.011 )2 VZ v 1 d10 0 d9 0 d8 0 Vorkomma d7 d6 0 1 d5 0 d4 1 d3 0 Nachkomma d2 d1 d0 0 1 1 2 Festpunkt-Zahlensystem • Größte und kleinste Festpunktzahl VZ v Vorkomma … dn+g-1 dn+g-2 … dn Nachkomma … … d1 dn-1 d0 • Zahlen haben gleichmäßig konstanten Abstand 2-n VZ v Vorkomma … dn+g-1 dn+g-2 … dn Nachkomma … … d1 dn-1 d0 Problem: • große ganze Zahlen: Reduktion der Nachkommastellen n • kleine Zahlen: Reduktion der Vorkommastellen g Festpunkt-Zahlensystem • N = 12 Bit, n = 3 Bit Nachkommastellen • Größte, kleinste Zahl, Abstand? VZ v d10 d9 d8 Vorkomma d7 d6 d5 d4 d3 Nachkomma d2 d1 d0 • Zahlengerade 3 Gleitpunkt-Darstellung • Darstellung von Zahlen, die betragsmäßig sehr groß UND sehr klein sein können • Darstellung der Form: x = ± Mantisse · Basis Exponent • Beispiel: (0.001234)10 = Gleitpunkt-Darstellung VZ d N-1 • • • • • d N-2 Exponent d N-3 … … Mantisse dn d n-1 … … d1 d0 Basis b (vereinbart, nicht gespeichert) Mantisse (gespeichert auf p Stellen genau) Exponent e Vorzeichen v x = (-1)v ·(Mantisse) ·bExponent • falls normalisiert: x = (-1)v ·(m0 + m1b-1 +… + mp-1 -(p-1)) ·be mit m0 ≠ 0 4 Gleitpunkt-Darstellung Parameter • Basis b ≥ 2 • Mantissenlänge p ≥ 2 • kleinster Exponent emin < 0 • größter Exponent emax > 0 • Normalisierungsindikator denorm = {false, true} • Benachbarte Zahlen im Intervall [be, be+1] haben konstanten Abstand ∆ x = be-p+1 = 1 ulp · be IEEE 754 Gleitpunkt Zahlensystem Single Format (32 Bit) Double Format (64 Bit) F(2,24,-126,127,true) F(2,53,-1022,1023,true) • Vorzeichenbit (MSB) • Exponent – Bitbreite 8 Bit – Exzess 127 – emin= -126, emax=127 • Mantisse (23+1 Bit) – implizites erstes Bit • denorm=true • Vorzeichenbit (MSB) • Exponent – Bitbreite 11 Bit – Exzess 1023 – emin= -1022, emax=1023 • Mantisse (52+1 Bit) – implizites erstes Bit • denorm=true 5 Zahlen, Not a Number, Unendlich +∞ -∞ F(2,24,-126,127,true) • (-172.625)10 • Schritt 1: Konvertierung 172.625 (-172.625)10 ⇔ (10101100.101)2 • Schritt 2: Normalisierung (10101100.101)2 * 20 = (1.0101100101)2 * 27 6 F(2,24,-126,127,true) • (-172.625)10 • Schritt 3: Exponent bilden – Exponent = Exzess + Exponent der normalisierten Darstellung – Exponent = 127 + 7 = 134 • Schritt 4: Vorzeichenbit – positive Zahlen: MSB = 0 – negative Zahlen: MSB = 1 11000011001011001010000000000000 F(2,24,-126,127,true) 11000100011111111101010000000000 • Für normalisierte Zahlen gilt: • Für subnormale Zahlen gilt: • z = (- 1023.3125)10 7 Runden Gegeben Mantisse • Abschneiden: • Aufrunden: • Abrunden Runden (cont.) Gegeben Mantisse • Nächstgelegener Wert: 8 Runden durch Abschneiden truncate(x) F(2, 3, -1, 2, true) 1.11 1.10 1.01 x 1.00 1.001 1.01 1.011 1.10 1.101 1.11 1.111 Gerichtetes Runden up(x) F(2, 3, -1, 2, true) 1.11 1.10 1.01 x 1.00 1.001 1.01 1.011 1.10 1.101 1.11 1.111 9 Runden auf nächstgelegenen Wert rtne(x) F(2, 3, -1, 2, true) 1.11 1.10 1.01 x 1.00 1.001 1.01 1.011 1.10 1.101 1.11 1.111 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 10 Sticky Bit • Für „round-to-even“ Runden und falls das Ergebnis in gleichem Abstand zum oberen und unteren nächstliegenden Fließkommawert liegt, benötigt man eine zusätzliche Stelle („sticky“ Bit). grs Vorgangsweise 0xx Mantisse bleibt, wie sie ist 11x Mantisse++, betragsmäßig, d.h. ohne Berücksichtigung des Vorzeichens 100 falls LSB der Mantisse=0, Mantisse bleibt LSB = rechtestes Bit (ohne grs) falls LSB der Mantisse=1, Mantisse++, betragsmäßig LSB = rechtestes Bit (ohne grs) 101 beide Summanden haben dasselbe VZ: Mantisse++, betragsmäßig Summanden haben unterschiedliche VZ: Mantisse bleibt Beispiel • Gleitpunkt-Zahlensystem: – Vorzeichen, 5 Stellen Exponent (Exzess 16), 10 Stellen Mantisse (mit expliziter Darstellung der führenden ‘1’), Runden durch Abschneiden. – Zahl A: (5.58)10, Zahl B: (62.27)10, Gesucht A+B • Init: Gleitpunkt-Darstellung – – – – Schritt 1: Umrechung in Binärsystem Schritt 2: Normalisierung Schritt 3: Exponentendarstellung Schritt 4: Vorzeichen • Addition (mit grs-Behandlung) – – – – Schritt 1: Exponenten anpassen Schritt 2: A+B vor der Normalisierung Schritt 3: A+B nach der Normalisierung Schritt 4: A+B nach dem Runden “round to even” 11 Beispiel Gleitpunkt-Zahlensystem: Vorzeichen, 5 Stellen Exponent (Exzess 16!), 10 Stellen Mantisse (mit expliziter Darstellung der führenden ‘1’), Runden durch Abschneiden (truncate) Zahl A: (5.58)10, Zahl B: (62.27)10, Gesucht A+B • Init: Gleitpunkt-Darstellung (Schritt 1 – 4) A 0 1 0 0 1 1 1 0 1 1 0 0 1 0 1 0 B 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 0 Beispiel • Addition mit grs-Behandlung – Schritt 1: Exponenten anpassen A 0 1 0 0 1 1 1 0 1 1 0 0 1 0 1 0 B 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 0 g r s A 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 1 0 1 0 – Schritt 2: Mantissen addieren (A+B vor der Normalisierung) A 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 1 0 1 0 B 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 0 A+B 0 1 0 1 1 0 10 0 0 0 1 1 1 1 0 1 0 1 0 12 Beispiel • Schritt II: Addition mit grs-Behandlung – Schritt 3: Ergebnis Normalisierung A+B 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1 – Schritt 4: Rundungsvorschriften beachten (siehe Tabelle!) g r s A+B 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1 A+B 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1 0 + 1 ulp – Ergebnis: A+B nach dem Runden “round to even” A+B 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 Genauigkeitsbetrachtungen • Fehlerfortpflanzung und Auslöschung • Absoluter Rundungsfehler • Relativer Rundungsfehler • Für vorheriges Beispiel: – – – – Exaktes Ergebnis: Errechnetes Ergebnis: Absoluter Rundungsfehler: Relativer Rundungsfehler: x = 67.85 x = 67.875 0.025 0.037% 13 Multiplikation • Schritt 1: Multiplikation der Mantissen • Schritt 2: Addition der Exponenten • Schritt 3: Normalisieren und Runden des Ergebnisses • Schritt 4: Vorzeichenbit setzen Ausblick und Zusammenfassung • D. Goldberg: „What every computer scientist should know about floating-point arithmetic“, ACM Computing Surveys, (23)1:5-48, 1991. • IEEE: „Standard 754-1985 for binary floating-point arithmetic“, Institute of Electrical and Electronic Engineers, 1985. • Google IEEE-754 Floating Point Conversion • Tutorien 14