Eines der Probleme bei der Newtonschen Methode besteht darin, dass in jeder Iteration eine Divisionsoperation erforderlich ist, die die langsamste grundlegende Ganzzahloperation ist.
Newtons Methode für die reziproke Quadratwurzel tut dies jedoch nicht. Wenn die Zahl ist, für die Sie 1 finden möchtenx , iteriere:1x√
ri+1=12ri(3−xr2i)
Dies wird oft ausgedrückt als:
wi=r2i
di=1−wix
ri+1=ri+ridi2
Das sind drei Multiplikationsoperationen. Die Division durch zwei kann als Rechtsverschiebung implementiert werden.
r
x
x′=2−2ex
x′1x′xr=1x√′x−−√=2erx′
r
ri=2−eir′i
r′iei
Wir wissen, dass Newtons Methode die Anzahl der genauen signifikanten Stellen ungefähr verdoppelt. So können wir wählen:
ei+1=2ei
Mit ein wenig Manipulation finden wir:
ei+1=2ei
wi=r′i2
x′i=x22e−ei+1
di=2ei+1−w′ix′i2ei+1
r′i+1=2eir′i−r′idi2ei+1
Bei jeder Iteration:
x−−√≈r′ix2e+ei
x=2632312–√12√2−31e=31r′0=3e0=23412√
Dann:
e1=4,r′1=11
e2=8,r′2=180
e3=16,r′3=46338
e4=32,r′4=3037000481
eieei>2e
263−−−√≈3037000481×263231+32=3037000481
3037000499ei
bO(blogb)r′i<2eiwieiei+1ei+12ei+1-bit Nummer.
O(eilogei)O(loge)O(2elog2e)O(elog2e)x
Diese Analyse verbirgt jedoch ein wichtiges Prinzip, das jeder, der mit großen ganzen Zahlen arbeitet, berücksichtigen sollte: Da die Multiplikation in der Anzahl der Bits superlinear ist, sollten Multiplikationsoperationen nur mit ganzen Zahlen durchgeführt werden, die ungefähr die Größe der aktuellen Genauigkeit (und) haben Ich möchte hinzufügen, dass Sie versuchen sollten, Zahlen mit einer ähnlichen Größenordnung zu multiplizieren. Die Verwendung größerer Ganzzahlen ist eine Verschwendung von Aufwand. Konstante Faktoren sind wichtig, und für große ganze Zahlen sind sie sehr wichtig.
ab2cabc