SQRT(P**2 + Q**2)

Compute SQRT(P**2+Q**2)

Moler and Morrison have described a fast algorithm for computing SQRT(P**2+Q**2). This algorithm has cubic convergence. It means that the result is accurate to 6.5 decimal digits after two iterations, to 20 digits after three iterations, and to 62 digits after four iterations.

Unit: internal function, external function without procedure statement
Parameters: numbers P, Q, a positive integer IterCount - number of iterations
Returns: value SQRT(P**2+Q**2) with IterCount**3 decimal digits

SQRTP2AQ2: procedure
parse arg P, Q, IterCount
numeric digits IterCount ** 3
P = ABS(P); Q = ABS(Q)
if P < Q
  then do; W = P; P = Q; Q = W; end
if P = 0 then return Q
do IterCount
  R = Q / P; R = R * R; R = R / (4 + R)
  P = P + 2 * R * P; Q = Q * R
return P


Bentley J., Programming Pearls
CACM, December 1986, Vol. 29, No. 12, p. 1161

Cover Contents Index Main page

last modified 1st August 2001
Copyright 2000-2001 Vladimir Zabrodsky
Czech Republic