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 Vorkomma Nachkomma v dn+g- dn+g-2 dn dn- d d n Nachkommastellen g Vorkommastellen Vorzeichenbit ( bei negativer Zahl) Zahl x ist N = n + g + Bit breit N-2 x = (-) v 2 -n d j 2 j j= = (-) v d N-2 d n. d n- d d
Festpunkt-Zahlensystem N = 2 Bit, n = 3 Bit Nachkommastellen ( ) 2 (-49.75) VZ Vorkomma Nachkomma v d d 9 d 8 d 7 d 6 d 5 d 4 d 3 d 2 d d Festpunkt-Zahlensystem N = 2 Bit, n = 3 Bit Nachkommastellen (-.375) (. ) 2 VZ Vorkomma Nachkomma v d d 9 d 8 d 7 d 6 d 5 d 4 d 3 d 2 d d 2
Festpunkt-Zahlensystem Größte und kleinste Festpunktzahl VZ Vorkomma Nachkomma v d n+g- d n+g-2 d n d n- d d Zahlen haben gleichmäßig konstanten Abstand 2 -n VZ Vorkomma Nachkomma v dn+g- dn+g-2 dn dn- d d Problem: große ganze Zahlen: Reduktion der Nachkommastellen n kleine Zahlen: Reduktion der Vorkommastellen g Festpunkt-Zahlensystem N = 2 Bit, n = 3 Bit Nachkommastellen Größte, kleinste Zahl, Abstand? VZ Vorkomma Nachkomma v d d9 d8 d7 d6 d5 d4 d3 d2 d d 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: (.234) = Gleitpunkt-Darstellung VZ Exponent Mantisse dn- dn-2 dn-3 dn dn- d d Basis b (vereinbart, nicht gespeichert) Mantisse (gespeichert auf p Stellen genau) Exponent e Vorzeichen v x = (-) v (Mantisse) b Exponent falls normalisiert: x = (-) v (m + m b - + + m -(p-) p- ) b e mit m 4
Gleitpunkt-Darstellung Parameter Basis b 2 Mantissenlänge p 2 kleinster Exponent e min < größter Exponent e max > Normalisierungsindikator denorm = {false, true} Benachbarte Zahlen im Intervall [b e, b e+ ] haben konstanten Abstand x = b e-p+ = ulp b e IEEE 754 Gleitpunkt Zahlensystem Single Format (32 Bit) Double Format (64 Bit) F(2,24,-26,27,true) F(2,53,-22,23,true) Vorzeichenbit (MSB) Exponent Bitbreite 8 Bit Exzess 27 e min = -26, e max =27 Mantisse (23+ Bit) implizites erstes Bit denorm=true Vorzeichenbit (MSB) Exponent Bitbreite Bit Exzess 23 e min = -22, e max =23 Mantisse (52+ Bit) implizites erstes Bit denorm=true 5
Zahlen, Not a Number, Unendlich + - F(2,24,-26,27,true) (-72.625) Schritt : Konvertierung 72.625 (-72.625) (.) 2 Schritt 2: Normalisierung (.) 2 * 2 = (.) 2 * 2 7 6
(-72.625) Schritt 3: Exponent bilden F(2,24,-26,27,true) Exponent = Exzess + Exponent der normalisierten Darstellung Exponent = 27 + 7 = 34 Schritt 4: Vorzeichenbit positive Zahlen: MSB = negative Zahlen: MSB = F(2,24,-26,27,true) Für normalisierte Zahlen gilt: Für subnormale Zahlen gilt: z = (- 23.325) 7
Gegeben Mantisse Runden Abschneiden: Aufrunden: Abrunden Gegeben Mantisse Runden (cont.) Nächstgelegener Wert: 8
Runden durch Abschneiden truncate(x) F(2, 3, -, 2, true)........... x up(x). Gerichtetes Runden F(2, 3, -, 2, true).......... x 9
Runden auf nächstgelegenen Wert rtne(x) F(2, 3, -, 2, true)........... x Addition/Subtraktion Schritt : 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
grs Vorgangsweise xx Mantisse bleibt, wie sie ist 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). x Mantisse++, betragsmäßig, d.h. ohne Berücksichtigung des Vorzeichens falls LSB der Mantisse=, Mantisse bleibt LSB = rechtestes Bit (ohne grs) falls LSB der Mantisse=, Mantisse++, betragsmäßig LSB = rechtestes Bit (ohne grs) beide Summanden haben dasselbe VZ: Mantisse++, betragsmäßig Summanden haben unterschiedliche VZ: Mantisse bleibt Beispiel Gleitpunkt-Zahlensystem: Vorzeichen, 5 Stellen Exponent (Exzess 6), Stellen Mantisse (mit expliziter Darstellung der führenden ), Runden durch Abschneiden. Zahl A: (5.58), Zahl B: (62.27), Gesucht A+B Init: Gleitpunkt-Darstellung Schritt : Umrechung in Binärsystem Schritt 2: Normalisierung Schritt 3: Exponentendarstellung Schritt 4: Vorzeichen Addition (mit grs-behandlung) Schritt : 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
2 Beispiel Gleitpunkt-Zahlensystem: Vorzeichen, 5 Stellen Exponent (Exzess 6!), Stellen Mantisse (mit expliziter Darstellung der führenden ), Runden durch Abschneiden (truncate) Zahl A: (5.58), Zahl B: (62.27), Gesucht A+B Init: Gleitpunkt-Darstellung (Schritt 4) A B Beispiel Addition mit grs-behandlung Schritt : Exponenten anpassen Schritt 2: Mantissen addieren (A+B vor der Normalisierung) A B A g r s A+B A B
Beispiel Schritt II: Addition mit grs-behandlung Schritt 3: Ergebnis Normalisierung A+B Schritt 4: Rundungsvorschriften beachten (siehe Tabelle!) A+B g r s A+B ulp + Ergebnis: A+B nach dem Runden round to even A+B Genauigkeitsbetrachtungen Fehlerfortpflanzung und Auslöschung Absoluter Rundungsfehler Relativer Rundungsfehler Für vorheriges Beispiel: Exaktes Ergebnis: x = 67.85 Errechnetes Ergebnis: x = 67.875 Absoluter Rundungsfehler:.25 Relativer Rundungsfehler:.37% 3
Schritt : Multiplikation der Mantissen Multiplikation 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):5-48, 99. IEEE: Standard 754-985 for binary floating-point arithmetic, Institute of Electrical and Electronic Engineers, 985. Google IEEE-754 Floating Point Conversion Tutorien 4