Almkvist Berndt 1988 begins with an investigation of why the agm is such an efficient algorithm, and proves that it converges quadratically. This is an efficient method to calculate 



π


{\displaystyle \pi }

.

With the same notations used in Arithmetic-geometric mean, we can summarize the paper by writing:





π
=



4


a
g
m

(
1
,
1

/



2



)

2




1
−

∑

n
=
1


∞



2

n
+
1


(

a

n


2


−

g

n


2


)





{\displaystyle \pi ={\frac {4\;\mathrm {agm} (1,1/{\sqrt {2}})^{2}}{1-\sum \limits _{n=1}^{\infty }2^{n+1}(a_{n}^{2}-g_{n}^{2})}}}



This allows you to make the approximation, for any large   N:





π
≈



4


a

N


2




1
−

∑

k
=
1


N



2

k
+
1


(

a

k


2


−

g

k


2


)





{\displaystyle \pi \approx {\frac {4\;a_{N}^{2}}{1-\sum \limits _{k=1}^{N}2^{k+1}(a_{k}^{2}-g_{k}^{2})}}}



The purpose of this task is to demonstrate how to use this approximation in order to compute a large number of decimals of 



π


{\displaystyle \pi }

.

# include "rational";  # a reminder
 
def pi(precision):
  (precision | (. + log) | ceil) as $digits
  | def sq: . as $in | rmult($in; $in) | rround($digits);
  {an: r(1;1),
   bn: (r(1;2) | rsqrt($digits)),
   tn: r(1;4),
   pn: 1 }
  | until (.pn > $digits;
      .an as $prevAn
      | .an = (rmult(radd(.bn; .an); r(1;2)) | rround($digits) )
      | .bn = ([.bn, $prevAn] | rmult | rsqrt($digits) )
      | .tn = rminus(.tn; rmult(rminus($prevAn; .an)|sq; .pn))
      | .pn *= 2 
      )
   | rdiv( radd(.an; .bn)|sq; rmult(.tn; 4))
   | r_to_decimal(precision);
 
pi(500)