Square root of positive real numbers
ALGORITHM The square root of a positive real number N can be computed with Newton's formula: New=0.5*(X+N/X)
where X above starts with a "reasonable" guess, e.g. (1+N)/2. It computes the square root until the absolute value of difference of two adjacent guess values is less than the tolerance value. Newton's iteration algorithm converges quadratically to the root.
IMPLEMENTATION
Unit:
internal function, external function without procedure statement
Parameters: a positive real number N>0, a positive integer P - number of significant digits of SQRT(N), default is 9
Returns: the first P significant digits of SQRT(N)
SQRT: procedure
parse arg N, P
if P = "" then P = 9; numeric digits P
parse value FORMAT(N,,,,0) with N "E" Exp
if Exp = "" then Exp = 0
if (Exp // 2) <> 0 then
if Exp > 0
then do; N = N * 10; Exp = Exp - 1; end
else do; N = N / 10; Exp = Exp + 1; end
X = 0.5 * (N + 1)
do forever
NewX = 0.5 * (X + N / X)
if X = NewX then return X * 10 ** (Exp % 2)
X = NewX
end
|
EXAMPLE
The following program
say SQRT(2)
say SQRT(2, 18)
exit
SQRT: procedure
...
|
displays on the screen
1.41421356
1.41421356237309505
|
CONNECTIONS
|