NUMBER PI

PROBLEM
Compute the number Pi to thousand decimal places.

ALGORITHM
Algorithm of J. M. Borwein and P. B. Borwein for computation of Pi number starts with the initializations

X=SQRT(2); Pi=2+X; Y=SQRT(X)

and then repeats the iteration

 X = 0.5 * (SQRT(X) + 1 / SQRT(X) Pi = Pi * (X + 1) / (Y + 1) Y = Y * (SQRT(X) + 1 / SQRT(X)) / (Y + 1)

IMPLEMENTATION
Unit: internal function, external function without procedure statement

Interface: SQRT function

Parameter: a positive integer P - number of digits of Pi, implicit P=9

Returns: the first P significant decimal digits of Pi, default is 9

 PI: procedure parse arg P if P = "" then P = 9; numeric digits P X = SQRT(2, P); Pi = 2 + X Y = SQRT(X, P); X = Y do forever   X = 0.5 * (X + 1 / X)   NewPi = Pi * (X + 1) / (Y + 1)   if Pi = NewPi then return Pi   Pi = NewPi   X = SQRT(X, P)   Y = (Y * X + 1 / X) / (Y + 1) end

There is an another way to obtain the value of the number Pi: we can compute the number Pi only once and save its value into the text of the function. The following PICONST function can be used to computing of the first P decimal digits of Pi, for P=1,...,200. It was created automatically by the program, see Technique: Beforehand computed constants.

 PICONST: procedure; V = '' V = V || 3.14159265358979323846264338327950288419 V = V || 7169399375105820974944592307816406286208 V = V || 9986280348253421170679821480865132823066 V = V || 4709384460955058223172535940812848111745 V = V || 028410270193852110555964462294895493038196 return V

The statement Number_Pi=PI(1000) computes 10 times loop in PI function and requires 79 seconds.

CONNECTIONS
Square root of positive number
Technique: Beforehand computed constants
P+n trick by Walter Pachl in Reflexio

Literature
Press W.H., Teukolsky S.A., Vetterling W.T., Flannery B.P. Numerical Recipes in C : the art of scientific computing
- 2nd ed. University Press, Cambridge, 1992

 cover contents index main page