Rechnerarithmetik Vorlesung im Sommersemester 2008 Eberhard Zehendner FSU Jena Thema: Auswertung von Standardfunktionen Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 1 / 30
Auswertung von Standardfunktionen Neben den vier Grundoperationen +,,, / wird häufig auch die Implementierung von Standardfunktionen wie e x, ln x, sin x, cos x... gefordert. Grundlegende Techniken zur Auswertung von Standardfunktionen sind: Entnahme aus Wertetabellen oder Zusammensetzung aus tabellierten Werten. Polynomapproximation, insbesondere Taylor-Reihen oder Tschebyschew-Approximation. Rationale Approximation. Gekoppelte Rekurrenzgleichungen, insbesondere additive oder multiplikative Normalisierung, vor allem das CORDIC-Verfahren. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 2 / 30
Auswertung von Standardfunktionen: Wertetabellen Konzeptionell einfachste Methode zur Auswertung von Standardfunktionen. Interessant wegen hoher Packungsdichte von Speicherstrukturen. Tabelleninhalte leichter verifizierbar als Logikstrukturen. Vorteile hinsichtlich Robustheit, Flexibilität und Time-to-Market. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 3 / 30
Wertetabellen: Direkter versus indirekter Zugriff Für direkten Tabellenzugriff werden Werte einer Funktion f (x 1, x 2,..., x k ) für alle interessierenden Argumente (u. a. bestimmt durch die Darstellungsgenauigkeit) in einem Speicher abgelegt. Sind die Argumente mit m 1, m 2,..., m k Bits dargestellt, so ergibt sich ein l-bit-funktionswert durch Anlegen der konkatenierten Argumente als m-bit-adresse an ein (2 m l)-bit-rom, k m = m i. i=1 Wegen des Aufwands kommt diese Methode nur für Zahlen geringer Genauigkeit in Frage. Bei indirektem Tabellenzugriff werden die Argumente zunächst aufbereitet, dann ein oder mehrere Tabellenzugriffe durchgeführt, deren Ergebnisse schließlich zum gesuchten Funktionswert verknüpft werden. Beispiel: Berechnung von Produkten aus einer Tabelle von Quadraten: x y = (x + y)2 (x y) 2 4 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 4 / 30
Interpolation von Tabellenwerten Lineare Interpolation: f (x) f (y) + (x y) [f (z) f (y)] z y Zur Steigerung der Genauigkeit auch f (x) g(y) + für alle x [y, z] (x y) [g(z) g(y)] z y Für eine effiziente Implementierung werden als Stützstellen all diejenigen Zahlen aus dem interessierenden Bereich gewählt, deren r niederwertigste Ziffern Null sind. Außer der linearen Interpolation wird gelegentlich auch quadratische Interpolation angewandt. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 5 / 30
Auswertung von Standardfunktionen mit kleinen Multiplizierern Die Verwendung kleiner Multiplizierer wird möglich, indem Segmente der Repräsentation eines Arguments als (kurze) eigenständige Zahlen behandelt werden. Beispiel: Berechnung von e X, wobei X = 1 + A 1 λ + A 2 λ 2 + A 3 λ 3 + A 4 λ 4 mit λ = 2 k und A i UInt 2 (k). Ercegovac et al. schlagen in IEEE Computer, Vol. 49, No. 7, folgenden Algorithmus vor: Approximiere e A mit A = A 2 λ 2 + A 3 λ 3 + A 4 λ 4 durch 1 + A + 1 2 A2 2 λ4 + A 2 A 3 λ 5 + 1 6 A3 2 λ6 Multipliziere das Ergebnis mit dem Wert von e 1+A 1λ aus einer Wertetabelle. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 6 / 30
Auswertung von Standardfunktionen: Taylor-Reihen Genügend oft differenzierbare Funktionen können prinzipiell über eine Taylor-Reihe ausgewertet werden. Taylorscher Satz: Es sei a aus dem offenen Intervall I. Besitzt die reelle Funktion f : I R auf I die Ableitungen f, f,..., f m, so gibt es zu jedem x I ein µ (0, 1) mit m 1 f (x) = f (i) (a) (x a)i i! + f m (a + µ (x a)) (x a)m m! m 1 Beispiel: f (x) = e x x i = i! + Rm(x) mit Rm(x) = eµ x x m m! Ohne Rundungsfehler konvergiert die Reihenentwicklung für alle x. Die Konvergenzgeschwindigkeit ist dabei monoton in x 1. Ob in beschränkter Genauigkeit Konvergenz eintritt, hängt von der Art der Rundung ab. Wegen Rundungsfehlern ist nicht klar, ob ein stationäres Ergebnis exakt gerundet ist. Tschebyschew-Approximation liefert im Allgemeinen bessere Resultate. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 7 / 30
Auswertung von Standardfunktionen: Rationale Approximation Rationale Approximation festen Grades ist häufig effizienter als Polynomapproximation. Beispiel: Die Funktion f (x) = 2 x mit x < 1 wird gut approximiert durch den Quotienten von Polynomen des Grades 5 mit konstanten Koeffizienten a i und b i, 2 x ((((a 5 x + a 4 ) x + a 3 ) x + a 2 ) x + a 1 ) x + a 0 ((((b 5 x + b 4 ) x + b 3 ) x + b 2 ) x + b 1 ) x + b 0 Der Aufwand im Hornerschema beträgt 10 Additionen, 10 Multiplikationen und eine Division. Daraus lässt sich zum Beispiel leicht weiter berechnen: e x = 2 x log 2 e = 2 m 2 y, wobei x log 2 e = m + y mit m Z und y < 1. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 8 / 30
Gekoppelte Rekurrenzgleichungen Ein wichtiger Ansatz zur Auswertung von Standardfunktionen basiert auf einem System gekoppelter Rekurrenzgleichungen: Jede einzelne Rekurrenzgleichung beschreibt einen iterativ in jedem Schritt des Verfahrens neu zu berechnenden Wert. Jeder Rekurrenzgleichung entspricht damit eine Folge von Zahlen. In den Rekurrenzgleichungen kommen gemeinsame Variablen (Koppelterme) vor. Wird durch spezielle Wahl der Koppelterme eine der Zahlenfolgen gegen einen vorgegebenen Grenzwert getrieben, streben die übrigen Zahlenfolgen entweder direkt gegen einen der gesuchten Funktionswerte oder gegen Zahlen, aus denen der Funktionswert leicht berechnet werden kann. Wichtige Formen von Algorithmen mit gekoppelten Rekurrenzgleichungen sind die additive Normalisierung (von speziellem Interesse ist hier das CORDIC-Verfahren) und die multiplikative Normalisierung. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 9 / 30
Auswertung der Exponentialfunktion durch additive Normalisierung Zur Auswertung der Exponentialfunktion in Festkomma-Darstellung wird ein System von Rekurrenzgleichungen mit Koppeltermen B i benutzt: X i+1 = X i ln B i Y i+1 = Y i B i Die B i werden so gewählt, dass die Folge der X i gegen 0 konvergiert: i X i+1 = X 0 ln B k 0 k=0 In der Praxis wird die Folge wegen beschränkter Genauigkeit stationär, X i = 0 für alle i m: m 1 X m = 0 X 0 = m 1 ln B i = ln m 1 B i Y m = Y 0 B i = Y 0 e X 0 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 10 / 30
Additive Normalisierung Anforderungen an das Verfahren: Die Folge der B i soll einfach zu bestimmen sein. Die Werte ln B i sollen leicht zu berechnen sein. Die Multiplikationen Y i B i sollen einfach durchzuführen sein. Die Anzahl m der Iterationen soll höchstens linear in der Länge l von X 0 wachsen. Zur Vereinfachung der Multiplikation wird B i = 1 + s i 2 i mit s i { 1, 0, 1} gewählt: Eine Multiplikation mit B i besteht nur aus einer Verschiebung und einer Addition/Subtraktion. ln B i = ln(1 + s i 2 i ) ist abhängig von s i positiv, Null oder negativ, was zur Konvergenz von positiven bzw. negativen X i gegen 0 gebraucht wird. Die Werte von ln(1 ± 2 i ) müssen aus einer Wertetabelle bestimmt werden, da ihre wiederholte Berechnung zu viel Zeit kosten würde; hierfür wird ein (2m l)-bit ROM benötigt. Die Werte sind normalerweise einem Modus Round-to-nearest entsprechend gerundet. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 11 / 30
Additive Normalisierung: Konvergenzbereich Zur Erzielung von X 0 = m 1 ln(1 + s i 2 i ) mit s i { 1, 0, 1} muss gelten m 1 m 1 ln(1 2 i ) X 0 ln(1 + 2 i ) i=1 Für entsprechend großes m genügt 1,24 X 0 1,56; für jedes X 0 in diesem Intervall gibt es eine Folge s 0, s 1,..., s m 1, die Konvergenz von X i gegen X m = 0 garantiert. Liegt X nicht im vorgeschriebenen Bereich, transformiert man e X = 2 n e f ln 2 mit X log 2 e = n + f, n Z, 0 f < 1 und setzt X 0 = f ln 2. Wegen 0 f < 1 gilt 0 X 0 < ln 2 0,7, also X 0 im zulässigen Bereich. Allgemeine Potenzen berechnen sich über Z X = e X ln Z. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 12 / 30
Additive Normalisierung: Implementierungsdetails Für positives X 0 genügt s i {0, 1}: D i = X i ln(1 + 2 i ) (X i, Y i ) falls D i < 0 (X i+1, Y i+1 ) = (D i, Y i + Y i 2 i ) falls D i 0 Wegen ln(1 + s i 2 i ) s i 2 i si 2 2 1 2 i wird in Schritt i in der Regel das i-te Bit von X i+1 zu Null gemacht; daher funktioniert auch die vereinfachte Regel s i = Bit i von X i. Mit h = l/2 gilt ln(1 ± 2 i ) ±2 i für i h. Die abschließenden h Iterationen können daher auch simultan durchgeführt werden können: Y m = Y h+1 = Y h (1 + X h ) Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 13 / 30
Berechnung von e 0,25 mit 10-Bit-Arithmetik (Round-to-nearest) i 1 + 2 i ln(1 + 2 i ) 1 2 i ln(1 2 i ) X i Y i s i 0 10,0000000000 0,1011000110 0 0,0100000000 1,0000000000 0 1 1,1000000000 0,0110011111 0,1000000000 0,1011000110 0,0100000000 1,0000000000 0 2 1,0100000000 0,0011100100 0,1100000000 0,0100100111 0,0100000000 1,0000000000 1 3 1,0010000000 0,0001111001 0,1110000000 0,0010001001 0,0000011100 1,0100000000 0 4 1,0001000000 0,0000111110 0,1111000000 0,0001000010 0,0000011100 1,0100000000 0 5 1,0000100000 0,0000100000 0,1111100000 0,0000100001 0,0000011100 1,0100000000 0 6 1,0000010000 0,0000010000 0,1111110000 0,0000010000 0,0000011100 1,0100000000 1 7 1,0000001000 0,0000001000 0,1111111000 0,0000001000 0,0000001100 1,0100010100 1 8 1,0000000100 0,0000000100 0,1111111100 0,0000000100 0,0000000100 1,0100011110 1 9 1,0000000010 0,0000000010 0,1111111110 0,0000000010 0,0000000000 1,0100100011 0 10 1,0000000001 0,0000000001 0,1111111111 0,0000000001 0,0000000000 1,0100100011 0 11 0,0000000000 1,0100100011 Das Ergebnis Y 11 = 1,0100100011 2 1,28418 ist maximal genau bezüglich 10-Bit-Mantisse. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 14 / 30
Berechnung von Logarithmen durch multiplikative Normalisierung Zur Berechnung von Logarithmen in Festkomma-Darstellung wird ebenfalls ein System von Rekurrenzgleichungen mit Koppeltermen B i benutzt: X i+1 = X i B i Y i+1 = Y i ln B i Die B i werden so gewählt, dass die Folge der X i gegen 1 konvergiert: m 1 B i = 1 m 1 Y m = Y 0 X 0 m 1 ln B i = Y 0 ln B i = Y 0 + ln X 0 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 15 / 30
Multiplikative Normalisierung: Implementierungsdetails Für B i = 1 + s i 2 i mit s i { 1, 0, 1} ergibt sich m 1 m 1 m 1 (1 2 i ) (1 + s i 2 i ) (1 + 2 i ) i=1 m 1 Für genügend großes m reicht 0,21 X 0 3,45 wegen 0,29 (1 + s i 2 i ) 4,77. Es kann dieselbe Wertetabelle wie für die Exponentialfunktion benutzt werden. Wie im Falle der Exponentialfunktion ist ein vereinfachtes Verfahren durch Einschränkung auf s i {0, 1} möglich: s i = 1 Bit (i + 1) von X i. Auch hier kann die Basis e in der Berechnung von Logarithmen problemlos durch eine andere Basis, z. B. 10, ersetzt werden. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 16 / 30
Berechnung von ln 0,25 in Arithmetik mit 10-Bit-Mantisse i X i Y i s i 0 0,0100000000 0,0000000000 1 1 0,1000000000-0,1011000110 1 2 0,1100000000-1,0001100101 1 3 0,1111000000-1,0101001001 0 4 0,1111000000-1,0101001001 1 5 0,1111111100-1,0110000111 0 6 0,1111111100-1,0110000111 0 7 0,1111111100-1,0110000111 0 8 0,1111111100-1,0110000111 1 9 1,0000000000-1,0110001011 0 10 1,0000000000-1,0110001011 0 11 1,0000000000-1,0110001011 Das Ergebnis Y 11 = 1,0110001011 2 1,38574 ist in Rundung zur Null maximal genau bezüglich 10-Bit-Mantisse. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 17 / 30
CORDIC-Algorithmen Im CORDIC-Verfahren (COordinate Rotate DIgital Computer) werden trigonometrische (und andere) Funktionen durch eine Folge von Koordinatentransformationen im R 3 berechnet. Das Verfahren beruht auf additiver Normalisierung und besitzt drei Varianten. In allen wird ein dreidimensionaler Vektor schrittweise solange transformiert, bis eine bestimmte der Komponenten Null geworden ist; die beiden anderen Komponenten (oder eine davon) geben dann den gesuchten Funktionswert an. Verfahren T y (Vektormodus): (x 0, y 0, z 0 ) Ty (x 1, y 1, z 1 ) Ty... Ty (x m 1, y m 1, z m 1 ) Ty (x m, 0, z m) Verfahren T z (Rotationsmodus): (x 0, y 0, z 0 ) Tz (x 1, y 1, z 1 ) Tz... Tz (x m 1, y m 1, z m 1 ) Tz (x m, y m, 0) Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 18 / 30
Das zirkuläre CORDIC-Verfahren Das zirkuläre CORDIC-Verfahren arbeitet mit folgenden gekoppelten Rekurrenzgleichungen: x i+1 = x i + y i δ i y i+1 = y i x i δ i mit δ i R, α i = arctan δ i z i+1 = z i + α i Die δ i werden dabei so gewählt, dass y i bzw. z i für i gegen Null strebt. Bei exakter Ausführung ergäbe sich x m = K (x 0 cos α + y 0 sin α) m 1 y m = K (y 0 cos α x 0 sin α) mit α = z m = z 0 + α α i, K = m 1 1 + δ 2 i Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 19 / 30
Zirkuläres CORDIC-Verfahren Für die praktische Anwendung müssen die Multiplikationen mit δ i schnell durchführbar sein. Für δ i = ±2 n i mit n i N geht dies einfach durch Rechtsverschiebung. Die Werte von α i = arctan δ i = arctan(±2 n i ) werden einer Wertetabelle entnommen. Das Vorzeichen von δ i wird so gewählt, dass sich y i bzw. z i in Richtung auf die Null zu verändert (eventuell aber auch darüber hinausschießt): mit T y : T z : δ i = sgn(x i ) sgn(y i ) 2 i δ i = sgn(z i ) 2 i { +1 falls u 0 sgn(u) = 1 falls u < 0 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 20 / 30
Konvergenz des zirkulären CORDIC-Algorithmus im Vektormodus Die CORDIC-Algorithmen konvergieren nicht für beliebige Startwerte x 0, y 0 und z 0. Es lässt sich aber zeigen, dass T y zur Konvergenz führt, wenn gilt: m 1 λ 0 arctan(2 1 m ) + arctan(2 i ) mit λ 0 = arctan(y 0 /x 0 ) falls x 0 0 arctan(y 0 /x 0 ) + π falls x 0 < 0, y 0 0 arctan(y 0 /x 0 ) π falls x 0 < 0, y 0 < 0 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 21 / 30
Funktionen des zirkulären CORDIC-Algorithmus im Vektormodus Im Rahmen der Rechengenauigkeit gilt dann x m = K x0 2 + y 0 2 sgn(x 0) mit y m = 0 z m = z 0 + arctan(y 0 /x 0 ) K = m 1 1 + δ 2 i = m 1 1 + 2 2i Für genügend großes m wird K 1,64676 und es hat λ 0 1,74 zu gelten. x 0 = 1 und z 0 = 0 ergeben x m = K 1 + y0 2 und zm = arctan y 0 für beliebiges y 0. Wegen arctan(1/y) = π/2 arctan y genügt eine Implementierung für y 0 1. Mit x 0 = 1 u 2, y 0 = u, z 0 = 0 ergibt sich z m = arcsin u. Mit x 0 = u, y 0 = 1 u 2, z 0 = 0 ergibt sich z m = arccos u. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 22 / 30
Konvergenz des zirkulären CORDIC-Algorithmus im Rotationsmodus Entsprechend führt T z zur Konvergenz, wenn m 1 z 0 arctan(2 1 m ) + arctan(2 i ) und im Rahmen der Rechengenauigkeit gilt mit demselben Wert von K x m = K (x 0 cos z 0 y 0 sin z 0 ) y m = K (y 0 cos z 0 + x 0 sin z 0 ) z m = 0 x 0 = 1/K und y 0 = 0 ergeben x m = cos z 0 und y m = sin z 0 für z 0 π/2. In allen anderen Fällen helfen die Regeln cos(z ± 2jπ) = cos z, cos(z π) = cos z, sin(z ± 2jπ) = sin z, sin(z π) = sin z. Mit einer ähnlichen Technik lässt sich z m = arccos c (bzw. z m = arcsin c) direkt berechnen, indem man x 0 = 0, y 0 = 1/K, z 0 = 0 setzt und x i (bzw. y i ) gegen den Wert c treibt. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 23 / 30
Hyperbolische CORDIC-Transformationen Das hyperbolische CORDIC-Verfahren benutzt die modifizierte CORDIC-Rekursion x i+1 = x i y i δ i y i+1 = y i x i δ i mit δ i ( 1, 1), α i = artanh δ i z i+1 = z i + α i Bei exakter Rechnung ergibt sich mit x m = K [x 0 cos(i α) + i y 0 sin(i α)] y m = K [y 0 cos(i α) i x 0 sin(i α)] z m = z 0 + α m 1 α = α i, K = m 1 1 + δ 2 i Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 24 / 30
Hyperbolisches CORDIC-Verfahren Die Folge der δ i ist hier aber verschieden von der des zirkulären CORDIC-Verfahrens: Um K argument-unabhängig zu machen, durchlaufen die n i in δ i = ±2 n i z. B. die Folge (1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 15,...), d. h. die natürlichen Zahlen, wobei die Zahlen 4, 13, 40, 121,..., k, 3 k + 1,... doppelt auftreten. Mit dieser Wahl der δ i ergibt sich K 0,82816. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 25 / 30
Vektormodus des hyperbolischen CORDIC-Verfahrens Treibt man y i gegen 0, so erhält man für y 0 < 0,81 x m = K x0 2 y 0 2 sgn(x 0) y m = 0 z m = z 0 + artanh(y 0 /x 0 ) Damit berechnet man: z m = artanh y 0 durch x 0 = 1, z 0 = 0 x m = K 1 y0 2 durch x 0 = 1 x m = K u durch x 0 = u + 1 4, y 0 = u 1 4 z m = 1 2 ln u durch x 0 = u + 1, y 0 = u 1, z 0 = 0 Argumente außerhalb des zulässigen Bereichs transformiert man mit folgender Formel: ( 2 u 2 artanh(1 2 e e ) u u) = artanh 2 + u 2 e + e ln 2 u 2 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 26 / 30
Rotationsmodus des hyperbolischen CORDIC-Verfahrens Treibt man z i gegen 0, so erhält man für z 0 < 1,13 x m = K (x 0 cosh z 0 + y 0 sinh z 0 ) y m = K (y 0 cosh z 0 + x 0 sinh z 0 ) z m = 0 und daraus mit x 0 = 1/K und y 0 = 0 x m = cosh z 0 y m = sinh z 0 Für Argumente außerhalb des Konvergenzbereichs können die folgenden Formeln verwendet werden, die für u < ln 2 0,69 und ganzzahliges q gelten: cosh(q ln 2 + u) = 2 q 1 [cosh u + sinh u + 2 2 q (cosh u sinh u)] sinh(q ln 2 + u) = 2 q 1 [cosh u + sinh u 2 2 q (cosh u sinh u)] Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 27 / 30
Indirekt mit dem CORDIC-Verfahren berechenbare Funktionen tan u = sin u/ cos u cot u = cos u/ sin u tanh u = sinh u/ cosh u coth u = cosh u/ sinh u e u = sinh u + cosh u u t = e t ln u arcosh u = ln(u + 1 u 2 ) arsinh u = ln(u + 1 + u 2 ) Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 28 / 30
Lineare CORDIC-Transformationen Eine weitere Variante des CORDIC-Verfahrens benutzt x i+1 = x i y i+1 = y i x i δ i mit α i = δ i R z i+1 = z i + α i Bei exakter Ausführung ergäbe sich x m = x 0 y m = y 0 x 0 α mit m 1 α = α i z m = z 0 + α Treibt man y i gegen 0, erhält man z m = z 0 + y 0 /x 0. Treibt man z i gegen 0, erhält man y m = y 0 + x 0 z 0. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 29 / 30
Geschlossene Darstellung der CORDIC-Verfahren x i+1 = x i + h y i δ i y i+1 = y i x i δ i z i+1 = z i + α i mit h { 1, 0, 1}, δ i R und arctan δ i h = 1 α i = δ i für h = 0 artanh δ i h = 1 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Standardfunktionen 30 / 30