Verfahren von Booth

Werbung
Verfahren von Booth
z Was haben wir bisher durch das Verfahren von Booth
gewonnen?
y Einsparung von Additionen bzw. Subtraktionen durch
Berücksichtigung von 0-Blöcken bzw. 1-Blöcken
y Aber: Weiterhin n Takte (n Shifts) nötig!
z Verbesserung:
y Zusammenfassen von k 1-Bit-Shifts in k Takten zu k-Bit-Shifts in
einem Takt
Ô Barrelshifter
Ô Dazu muß am Ende des (geshifteten) Multiplikators die Länge
des aktuellen 0- bzw. 1-Blocks bestimmt werden.
Ô Benutze dazu Prioritätsencoder
CS - RA - SS01
Kap. 2.1
2.1/1
Prioritätsencoder
xn-1
n = 2k
....
x0
xn-1
....
x0
PE_FIRST_0
PE_FIRST_1
...
...
z
yk-1
y0
z
yk-1
y0
z = 1, < y >= i , falls ∃i : xi = 0
z = 1, < y >= i , falls ∃i : xi = 1
und ∀j < i : x j = 1
z = 0, y bel., falls xi = 1 ∀i
und ∀j < i : x j = 0
z = 0, y bel., falls xi = 0 ∀i
Prioritätsencoder lassen sich mit O(n) Gattern in Tiefe O(log n)
realisieren.
CS - RA - SS01
Kap. 2.1
2.1/2
Division natürlicher Zahlen
z Bestimme zu n-Bit-Zahlen a, b
y den Quotienten < a > / < b > 
y und den Divisionsrest < a > mod < b >
z Alternativen bei Division durch 0:
y keine hardwaremäßige Fehlerbehandlung, Test muß durch
Software erfolgen
y Setzen bestimmter Flags im Statusregister
y Auslösen eines Interrupts (siehe später)
CS - RA - SS01
Kap. 2.1
2.1/3
Division ganzer Zahlen
z Meist Division der Beträge, dann Vorzeichenbestimmung
und evtl. Negieren des Ergebnisses, d.h. Zurückführen
auf Division natürlicher Zahlen
z Ergibt das eindeutige Ergebnisse?
y (+7)/(+2) = +3, Rest +1
Probe: (+2)*(+3)+(+1) = (+7)
y (-7)/(+2) = -3, Rest -1
Probe: (+2)*(-3)+(-1) = (-7)
y Aber auch: (-7)/(+2) = -4, Rest +1 Probe: (+2)*(-4)+(+1) = (-7)
z Regel: Dividend und Divisionsrest haben immer gleiches
Vorzeichen!
z Also:
y (+7)/(+2) = +3, Rest +1
y (-7)/(+2) = -3, Rest -1
y (+7)/(-2) = -3, Rest +1
y (-7)/(-2) = +3, Rest -1
CS - RA - SS01
Kap. 2.1
2.1/4
Division natürlicher Zahlen: Realisierung
z Divisionsalgorithmen sind meist angegeben für
Festkommazahlen mit bestimmten Größenbedingungen.
z Anwendung auf natürliche Zahlen erfordert evtl.
y vorheriges Shiften
y Festkommadivision mit geeigneter Genauigkeit (Stellenanzahl
des Ergebnisses)
y Shiften des Ergebnisses
CS - RA - SS01
Kap. 2.1
2.1/5
Division natürlicher Zahlen: Darstellung
durch Festkommazahlen
z Schulmethode auf Festkommazahlen:
z Festkommadarstellung a0 .a−1a− 2...a−( n−1)
mit Wert
| a0 .a−1...a−(n −1) | = a0 2 0 + a−1 2 −1 + ... + a−( n−1) 2 −(n −1)
z Gegeben:
( 0)
( 0)
(0)
(0)
y Dividend R = r0 .r−1 ...r−( n −1)
y Divisor D = d 0 .d −1...d −( n −1)
y Größenbedingung: 0 < | R ( 0 ) | < | D | < 1
z Berechnet wird in n Schritten
y Quotient Q = q0 .q−1...q− ( n −1)
(n)
( n) (n)
( n)
y Rest R = r0 .r−1 ...r− ( n −1)
CS - RA - SS01
Kap. 2.1
2.1/6
Division nach Schulmethode
z Prinzip wie „schriftliche Division“:
y Bestimme aktuelles Quotientenbit:
Falls Differenz von aktuellem Partialrest und Divisor negativ
werden würde: Quotientenbit = 0, sonst Quotientenbit = 1.
y Shifte neuen Partialrest und wiederhole Verfahren.
CS - RA - SS01
Kap. 2.1
2.1/7
Division nach Schulmethode
z Beispiel:
y Hier: Dividiere 2n-Bit-Zahl durch n-Bit-Zahl
R ( 0 ) = r0( 0 ) .r−(10 ) ...r−((02)n −1) = 0.101001
D = d 0 .d −1...d −( n −1) = 0.111
y Es gilt: 0 < | R
(0)
|<| D|< 1
y Gesucht:
Quotient Q = q0 .q−1...q− 3
Rest
R ( 4 ) = r0( 4 ) .r−(14 ) ...r−(34 )
y − | D | = | 1.001|
CS - RA - SS01
Kap. 2.1
2.1/8
R(0)
0.101001
Subtrahiere D probeweise
+1.001
1.110001 <0, also q0 = 0
Rückaddition von D
+0.111
0.101001
01.01001
Shifte um eine Stelle nach links ⇒ R(1)
Subtrahiere D
+11.001
≥ 0, also q-1 = 1, keine Rückaddition von D
00.01101
(2)
0.1101
Shifte
um
eine
Stelle
nach
links
⇒
R
Da klar ist, daß +1.001
Subtrahiere D
das Ergebnis ≥
<0, also q-2 = 0
1.1111
0 und <1, kann +0.111
Rückaddition von D
man führende
0.1101
Stelle schon
Shifte um eine Stelle nach links ⇒ R(3)
1.101
vor Addition
+1.001
Subtrahiere D
weglassen
0.110
≥ 0, also q-3 = 1, keine Rückaddition von D
⇒ man kommt
1.10
Shifte um eine Stelle nach links ⇒ R(4)
mit n-BitInsgesamt gilt:| Q | = | q0 .q−1...q−3 | = | 0.101| = 58
Addierer aus
CS - RA - SS01
| R ( 4) | = | r0( 4 ) .r−(14 ) ...r−(34) | = | 1.100 | = 64
| R( 0 ) | = | Q | ⋅ | D | + | R ( 4 ) | ⋅2 − 4
41 = 5 ⋅ 7 + 6
64
8 8
4⋅16
Kap. 2.1
2.1/9
Division nach Schulmethode
z Prinzip wie „schriftliche Division“:
y Bestimme aktuelles Quotientenbit:
Falls Differenz von aktuellem Partialrest und Divisor negativ
werden würde: Quotientenbit = 0, sonst Quotientenbit = 1.
y Shifte neuen Partialrest und wiederhole Verfahren.
( j)
( j)

2
|
R
|
,
falls
|
R
|-| D|< 0
( j +1)
|R
|= 
( j)
( j)
2
(|
R
|
−
|
D
|)
,
falls
|
R
|−| D|≥ 0

q− j
y Es gilt:
CS - RA - SS01
0, falls | R ( j ) - D | < 0
=
( j)
1
,
falls
|
R
− D|≥ 0

| R ( j +1) | = 2(| R ( j ) | − q− j | D |)
Kap. 2.1
2.1/10
Division nach Schulmethode
| R ( j +1) | = 2(| R ( j) | − q− j | D |) = 2 | R ( j ) | − 2 q− j | D |
Daraus folgt:
| R ( n) | = 2 | R (n −1) | − 2q −( n−1) | D |
= 2 ⋅ (2 | R ( n − 2 ) | − 2 q− ( n − 2 ) | D |) − 2 q− ( n −1) | D |
= 4 | R ( n− 2) | − 4q −( n −2) | D | − 2 q−(n −1) | D |
.
.
.
=2 |R
n
( 0)
| − | D | ⋅∑ j =0 2 n − j q− j
n−1
2 n | R (0) | = | D | ⋅2 n ⋅ | Q | + | R ( n) |
Also insgesamt:
| R ( 0) | = | D | ⋅ | Q | + | R ( n) | ⋅2 −n
CS - RA - SS01
Kap. 2.1
2.1/11
Restoring und nonrestoring division
z Die vorgestellte Division nach der Schulmethode heißt
auch „restoring division“, da nach Subtraktion von D mit
negativem Resultat der ursprüngliche Partialrest durch
Rückaddition wieder „restauriert“ wird.
z Die Rückaddition kann jedoch vermieden werden
⇒ „nonrestoring division“:
y Idee: Kombiniere die Rückaddition mit der nächsten
probeweisen Subtraktion!
( j)
y Ist DIFF
= | R ( j ) | − | D | negativ, so erfolgt bei der
restoring division Rückadition, Linksshift um eine Stelle und
wieder probeweise Subtraktion von D.
( j)
( j)
y Wegen 2( DIFF + | D |)− | D | = 2 DIFF + | D | kann
man dies ersetzen durch Linksshift um eine Stelle und Addition
von D.
CS - RA - SS01
Kap. 2.1
2.1/12
Nonrestoring division
z Bei der nonrestoring division ergibt sich also für
DIFF ( j ) = | R ( j ) | − | D | , j = 0,...,n-2:
DIFF ( j +1)
2 ⋅ DIFF ( j ) + | D |, falls DIFF ( j ) < 0
=
( j)
( j)
2
⋅
DIFF
−
|
D
|
,
falls
DIFF
≥0

z Rückaddition ist nur nötig zur Berechnung von R(n):
R ( n)
CS - RA - SS01
2 ⋅ ( DIFF (n −1) + | D |), falls DIFF ( n−1) < 0
=
( n −1)
( n −1)
2
⋅
DIFF
,
falls
DIFF
≥0

Kap. 2.1
2.1/13
Nonrestoring division: Beispiel
restoring division
R(0)
R(1)
R(2)
R(3)
R(4)
0.101001
+1.001
1.110001
+0.111
0.101001
01.01001
+11.001
00.01101
0.1101
+1.001
1.1111
+0.111
0.1101
1.101
+1.001
0.110
1.10
CS - RA - SS01
nonrestoring division
<0, also q0 = 0
0.101001
+1.001
1.110001
<0, also q-2 = 0
1.10001
+0.111
0.01101
0.1101
+1.001
1.1111
≥ 0, also q-3 = 1
1.111
+0.111
0.110
1.10
≥ 0, also q-1 = 1
Kap. 2.1
R(0)
R(1)-|D|
R(2)-|D|
R(3)-|D|
R(4)
2.1/14
Restoring und nonrestoring division
z Restoring und nonrestoring division lassen sich wie die
Multiplikation durch kombinatorische und sequentielle
Schaltkreise realisieren.
z Realisierung durch sequentiellen Schaltkreis:
Es genügen
y 1 Addierer (O(n) Gatter), Schieberegister mit Größe O(n)
y O(n) Takte, in jedem Takt Addition in Zeit O(log n)
z Realisierung durch kombinatorischen Schaltkreis:
y n Addierer ⇒ O(n2) Gatter
y Laufzeit O(n log n)
CS - RA - SS01
Kap. 2.1
2.1/15
Division nach Schulmethode
z Division nach der Schulmethode führt zu einem
kombinatorischen Schaltkreis der Größe O(n2) und Tiefe
O(n log n).
z Im Gegensatz zur Schultmethode der Multiplikation, bei
der die Partialprodukte in beliebiger Reihenfolge addiert
werden dürfen, ist die Division nach Schulmethode ein
„trial and error“-Prozess. Die Quotienten-Bits werden der
Reihe nach bestimmt.
z Frage: Kann man Division beschleunigen?
CS - RA - SS01
Kap. 2.1
2.1/16
Schnellere Division
z Antwort: Ja, man kann Division schneller als bei der
Schulmethode durchführen!
z Verfahren, die schneller arbeiten als die Schulmethode:
y SRT-Division
y iterative Verfahren wie
x Newton-Verfahren
x Goldschmidt-Verfahren
CS - RA - SS01
Kap. 2.1
2.1/17
SRT-Division
z Benannt nach Sweeney, Robertson und Tocher.
z Der Dividierer des Pentium ist ein SRT-Dividierer.
z Grundidee:
y Arbeite ähnlich wie die nonrestoring division mit n Stufen.
y Versuche die Tiefe der einzelnen Stufen zu reduzieren von
logarithmischer Tiefe zu konstanter Tiefe.
x Verwende dazu ein redundantes Zahlensystem, in dem in
konstanter Zeit addiert bzw. subtrahiert werden kann.
In einem redundanten Zahlensystem ergibt sich der Wert einer
Zahlendarstellung (an−1 ,..., a0 ) zur Basis b wie bekannt über die
n −1
gewichtete Summe ∑i =0 aib i , nur sind die einzelnen Ziffern nicht
lediglich aus {0,1}, sondern z.B. aus {-2,-1,0,1,2}.
(1,−1) ˆ
= 1 ⋅ 21 + (−1) ⋅ 20 = 1
Beispiel:
1
0
(0,1) =
ˆ 0 ⋅ 2 + 1⋅ 2 = 1
CS - RA - SS01
Kap. 2.1
2.1/18
SRT-Division
z Grundidee:
y ...
y Versuche die Tiefe der einzelnen Stufen zu reduzieren von
logarithmischer Tiefe zu konstanter Tiefe.
x Verwende dazu ein redundantes Zahlensystem, in dem in
konstanter Zeit addiert bzw. subtrahiert werden kann.
x Wähle das aktuelle Quotientenbit aus anhand von Präfixen
konstanter Länge von Partialrest und Divisor.
Intuition: Durch die redundante Darstellung des Quotienten kann
man „kleinere Fehler“ bei der Auswahl, die durch die
eingeschränkte Sicht auf Partialrest und Divisor verursacht werden,
bei der Wahl späterer Quotientenbits wieder ausgleichen.
⇒ Bestimmung der Quotientenbits über eine Tabelle möglich
(hier lag der Fehler beim Bug im Pentiumdividierer!)
z Resultat: Dividierer mit O(n2) Gattern und Tiefe O(n)
CS - RA - SS01
Kap. 2.1
2.1/19
Iterative Verfahren
z Die Berechnung einer Approximation für |x|/|z| wird hier
zurückgeführt auf die Berechnung des Kehrwertes 1/|z| von |z|
und anschließende Multiplikation mit |x|.
z Voraussetzung:
z = 0.z −1 z− 2...z −n mit z−1 = 1.
x = 0.x−1 x− 2 ...x−n mit x−1 = 1.
Also : 12 ≤ | x |,| z | < 1
− n +1
z Hat man eine um höchstens 2
abweichende Approximation
y = 1. y−1 y− 2 ...y−n von 1/|z| berechnet, so erhält man nach
Multiplikation mit |x| < 1 eine Approximation für |x|/|z| ebenfalls
− n +1
mit Abweichung von höchstens 2
.
z Abschneiden des Ergebnisses der Multiplikation (2n Nachkommastellen!) auf n Nachkommastellen führt insgesamt zu einem Fehler
< 2 −n +1 + 2 − n < 2 −n +2.
CS - RA - SS01
Kap. 2.1
2.1/20
Newton-Verfahren
siehe z.B. I. Wegener: Effiziente Algorithmen für grundlegende
Funktionen, Teubner, 1989
z Aufgabe:
Berechne aus z = 0.z −1 z− 2...z −n mit z−1 = 1.
eine um höchstens 2 −n+1 abweichende Approximation
y = 1. y−1 y− 2 ...y−n von 1/|z|
z Benutze dazu das bekannte Newtonverfahren zur
Nullstellenbestimmung einer konvexen, monoton fallenden Funktion
f.
−1
z Wähle dazu f ( x) = x − z.
Dann ist 1 z die einzige Nullstelle von f.
Diese Nullstelle ist mit dem Newtonverfahren zu approximieren.
CS - RA - SS01
Kap. 2.1
2.1/21
Newton-Verfahren allgemein
f konvex, monoton fallend. Sei die Nullstelle mit N bezeichnet.
Es sei ein zi mit 0 < zi ≤ N und f ( zi ) bekannt.
Konstruiere die Tangente T(x) , die f im Punkt ( zi , f ( zi )) berührt.
T(x) liegt wegen Konvexität unterhalb von f .
Schnittpunkt zi+1 von T mit x-Achse liegt im Intervall ( zi , N ]
⇒ bessere Approximation der Nullstelle als zi
Steigung von T(x) : f ' ( zi )
Geradengleichung von T(x) : T ( x) = f ' ( zi )( x − zi ) + f ( zi )
Berechne Nullstelle zi+1 von T(x) :
0 = f ' ( zi )( zi +1 − zi ) + f ( zi )
zi+1 = zi − f ( zi ) / f ' ( zi )
Folge der zi ist monoton wachsend, durch N beschränkt ⇒ konvergent
− zi+1 = f ( zi ) / f ' ( zi ) und lim( zi − zi +1 ) = 0 gilt
i →∞
lim f ( zi ) = 0 und damit lim zi = N .
Wegen zi
i →∞
CS - RA - SS01
i →∞
Kap. 2.1
2.1/22
Newton-Verfahren für Division
−1
Betrachte f ( x) = x − z.
Nullstelle ist N = 1 z .
Wähle z0 mit 0 < z0 ≤ N = 1 / z wegen 12 ≤ z < 1 als z0 = 1.
−2
f ' ( zi ) = − zi , also
−1
−2
zi+1 = zi − f ( zi ) / f ' ( zi ) = zi − ( zi − z ) /(− zi ) = 2 zi − zzi
2
Man sieht also: Bei der Berechnung von zi+1 fällt in diesem Spezialfall
für f glücklicherweise die Division weg!
Pro Approximationsschritt: (1 Shift), 2 Multiplikationen, 1 Subtraktion
CS - RA - SS01
Kap. 2.1
2.1/23
Newton-Verfahren:
Konvergenzgeschwindigkeit
Sei εi = z
zi +1
−1
− zi > 0 der Fehler in Schritt i .
2
= 2 zi − zzi und damit
Beweis:
εi +1
εi +1 = z −1 − zi +1 < εi2
= z −1 − zi+1
= z −1 − (2 zi − zzi2 )
= z −1 − 2( z −1 − εi ) + z ( z −1 − εi ) 2
= z −1 − 2 z −1 + 2εi + zz −2 − 2 zz −1εi + zεi2
= zεi2 < εi2 , da z < 1.
Wegen z0 = 1 gilt
ε1 = z −1 − z1 = z −1 − (2 z0 − zz02 ) = z −1 − 2 + z
−1
und wegen 12 ≤ z < 1 : ε1 = 1
z 4−224
+3z ≤
CS - RA - SS01
maximal für z = 12
Kap. 2.1
1
2
2.1/24
Newton-Verfahren:
Konvergenzgeschwindigkeit
Wegen εi +1 < ε und ε1
2
i
≤
1
2
gilt:
εi < 2
−2i−1
Nach log n + 1 Schritten gilt dann: εlog n +1 < 2
− 2log n 
< 2− n
Durch Abrunden des Ergebnisses nach log n  + 1 Schritten nach der
n-ten Nachkommastelle kann man sich zusätzlich einen Fehler von
−n
maximal 2 einhandeln.
Insgesamt hat man nach log n + 1 Schritten das Ergebnis in der
gewünschten Genauigkeit (höchstens Abweichung von 2 −n+1 ).
Problem: In jedem Schritt werden 2 Multiplikationen ausgeführt, so
daß sich die Zahlenlänge pro Schritt verdreifachen kann!
CS - RA - SS01
Kap. 2.1
2.1/25
Newton-Verfahren: Verbesserung
z Abhilfe:
y Beschränke die Zahlenlänge grundsätzlich auf 2n.
y Verdopple die Anzahl der Iterationen.
z Man kann beweisen, daß man das Ergebnis auch mit dieser
Methode in der gewünschten Genauigkeit erhält.
z Neuer Algorithmus:
y
y
y
ẑ0 = 1
zi+1 = 2 ˆ
zi − zˆ
zi2
ˆzi+1 = zi +1 abgerundet nach 2n-ter Nachkommastelle.
CS - RA - SS01
Kap. 2.1
2.1/26
Newton-Verfahren: Verbesserung
Behauptung: Der maximale Fehler nach 2i Iterationen dieses
− 2i −1
geänderten Verfahrens ist höchstens 2
(d.h. höchstens so groß
wie unsere Abschätzung des maximalen Fehlers des ursprünglichen
Verfahrens nach i Iterationen).
Beweis:
− 2i −1
Führe E (i − 1) = 2
als abkürzende Schreibweise ein.
Aufgrund des Rundens nach 2n Nachkommastellen gilt für den Fehlerε̂i
des geänderten Verfahrens in Schritt i:
εˆi +1 ≤ εˆi2 + 2 − 2n
εˆi +2 ≤ εˆi2+1 + 2 −2 n ≤ (εˆi2 + 2 − 2n ) 2 + 2 − 2n
≤ εˆi4 + εˆi2 2 −2 n+1 + 2 −4 n + 2 −2 n
CS - RA - SS01
Kap. 2.1
2.1/27
Newton-Verfahren: Verbesserung
Beweis: ...
εˆi +2 ≤ εˆi2+1 + 2 − 2n ≤ (εˆi2 + 2 −2 n ) 2 + 2 − 2n
≤ εˆi4 + εˆi2 2 −2 n +1 + 2 −4 n + 2 −2 n
Setzt man nun nach Induktionsannahme voraus, daß
−2( i −1)
εˆ2i ≤ E (i − 1) (= 2
= εi ) (gilt für i=1)
so ist zu zeigen: ε
ˆ2i+2 ≤ E (i)
εˆ2i+ 2 ≤ εˆ24i + εˆ22i 2 −2 n+1 + 2 −4 n + 2 −2 n
≤ E(i-1 )4 + E (i − 1) 2 2 − 2n +1 + 2 −4 n + 2 −2 n
= E(i)2 + E (i )2 −2 n +1 + 2 − 4n + 2 − 2n
− 2n +1
= E(i)( E
(i ) + 2123 +
{
1
εˆ2i+2 ≤ E (i)
CS - RA - SS01
≤ 12
≤8 für n≥2
−4 n+ 2i
2123
≤2− 3 n für i ≤log n ,≤ 641 für n≥ 2
Kap. 2.1
+
−2 n +2i
2123
)
≤2− n für i ≤log n,≤ 14 für n≥ 2
2.1/28
Newton-Verfahren: Verbesserung
z Insgesamt hat man nach 2(log n  + 1) Schritten ein Ergebnis, das
höchstens 2 − n von der exakten Lösung abweicht.
z Nach Runden von 2n auf n Nachkommastellen ergibt sich eine
Abweichung < 2 −n +1.
z Kosten des Newton-Verfahrens unter Verwendung eines WallaceTree-Multiplizierers (O(n2) Gatter, Tiefe O(log n)):
y O(n2 log n) Gatter
y Tiefe O(log2 n)
z Durch eine Verfeinerung des Verfahrens läßt sich dies verbessern zu
y O(n2) Gatter
y Tiefe O(log2 n)
CS - RA - SS01
Kap. 2.1
2.1/29
Goldschmidt-Verfahren
siehe z.B.
J. Hayes: Comp. Architecture & Organization, 1998
I. Wegener: Effiziente Algorithmen für grundlegende
Funktionen, Teubner, 1989
z Das Goldschmidt-Verfahren wurde 1967 von Anderson,
Earle, Goldschmidt und Powers eingeführt.
z Es wurde eingesetzt im IBM System/360 und wird daher
auch als „IBM-Methode“ bezeichnet.
z Wie beim Newton-Verfahren wird zunächst zu einer Zahl
z = 0.z −1 z −2 ...z− n mit z−1 = 1.
eine um höchstens 2 − n +1 abweichende Approximation
y = 1. y−1 y− 2 ...y−n von 1/z berechnet, d.h.
Kehrwertbildung wird als Hauptproblem isoliert.
CS - RA - SS01
Kap. 2.1
2.1/30
Goldschmidt-Verfahren
z Idee: Erweitere 1/z so, daß der Nenner ungefähr 1 wird, so daß die
approximative Berechnung des Zählers einen Näherungswert für 1/z
liefert.
z Verfahren:
y Berechne x = 1 − z (⇒ 0 < x ≤ 12 ).
y Mit der abkürzenden Schreibweise
berechne
x( j ) = x
2j
1
1
1 1 + x(0) 1 + x(1) 1 + x(k )
Pk ( x)
=
=
L
=
z 1 − x 1 − x 1 + x(0) 1 + x(1) 1 + x(k ) 1 − x(k + 1)
z Der Nenner 1-x(k+1) ergibt sich durch fortgesetzte Anwendung der
Binomischen Formel (a+b)(a-b)=a2-b2.
z Da x ≤ 12 , ist 1-x(k+1) nach genügend Iterationen nahezu 1.
CS - RA - SS01
Kap. 2.1
2.1/31
Goldschmidt-Verfahren
z Zu berechnen wäre
Pk ( x) = (1 + x(0))(1 + x(1)) ⋅ ... ⋅ (1 + x(k ))
2 j +1
z x( j + 1) = x
ergibt sich aus x( j ) = x durch Quadrieren.
z Fehler gegenüber dem idealisierten Verfahren ergeben sich ähnlich
wie beim Newton-Verfahren durch Abrunden zu Zahlen fester
Länge.
2j
y Bei Berechnung der x(j) : ⇒ x*(j).
y Nach Multiplikation mit 1+ x*(j).
z Fehler außerdem durch Annahme 1-x(k+1) = 1.
z Auch hier läßt sich zeigen: Trotz Verwendung von Zahlen fester
Länge O(n) läßt sich in O(log n) Schritten der Kehrwert in
gewünschter Genauigkeit berechnen.
z Insgesamt ergibt sich bei Verwendung von Wallace-TreeMultiplizierern ein Schaltkreis mit
y O(n 2 log n) Gattern
y Tiefe O(log2 n)
CS - RA - SS01
Kap. 2.1
2.1/32
Herunterladen