Karim Belabas on Wed, 17 Nov 2004 19:46:24 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: sqrt


* Jon Perry [2004-11-14 21:47]:
> May I ask for a profesional opinion on this sqrt algorithm?
> 
> Consider sqrt(n) where n has D digits. The square root therefore has D/2 or
> D+1/2 digits according to D being even or odd, let this be d.
> 
> Create y=10^d.
> 
> Add 10^d until y^2>n, then subtract 10^d to maintain 'underness'..
> 
> Lower d by 1, and repeat.

Assuming the expected output is floor( sqrt(n) ), this is correct but
rather inefficient [ # of operations linear in D, overall time cubic in D
assuming classical arithmetic ]. The "schoolbook algorithm" is a bit
better.  Newton's iteration

  x_0     = 1      [ or 10^{floor D/2} if you wish ]
  x_{i+1} = (1/2)(x_i + n/x_i)  [ only 2^i digits need to be computed ]

is much better. Paul Zimmermann has written a very nice survey of standard
multiprecision algorithm

  http://www.loria.fr/~zimmerma/papers/RR4272.ps.gz

(in french, but lots of explicit examples).

Cheers,

    Karim.
-- 
Karim Belabas                     Tel: (+33) (0)1 69 15 57 48
Dep. de Mathematiques, Bat. 425   Fax: (+33) (0)1 69 15 60 19
Universite Paris-Sud              http://www.math.u-psud.fr/~belabas/
F-91405 Orsay (France)            http://pari.math.u-bordeaux.fr/  [PARI/GP]