Help15:=proc(): print(`ArcA(k,N), ArcP(k,N) , AT(L), FindMachin(a,k), NorthM(N) `):end: ArcA:=proc(k,N) local p,i: p:=sin(Pi/k): for i from 2 to N do p:=sqrt((1-sqrt(1-p^2))/2): od: k*2^(N-1)*p: end: #ArcP(k,N): Archimedes' lower bounds and upper bounds using an inscribed and circumsribed polygons with k*2^N, sides. For example, to get #the Archimedes original values of 96-gons, do Arch(3,5); ArcP:=proc(k,N) local p,P,i: p:=k*sin(Pi/k): P:=k*tan(Pi/k): for i from 2 to N do P:=1/2*(1/P+1/p): P:=1/P: p:=sqrt(P*p): od: [p,P]: end: #AT(L): Sum arctan(L[i],i=1..n) AT:=proc(L) local a,b: if nops(L)=1 then L[1]: else a:=AT([op(1..nops(L)-1,L)]): b:=L[-1]: normal((a+b)/(1-a*b)): fi: end: #FindMachin(a,k): Finds the unique b such that AT([(1/a)$k,b])=1. Try FindMachin(5,4); FindMachin:=proc(a,k) local b: b:=solve(AT([(1/a)$k,b])=1,b): [(1/a)$k,b]: end: #NorthM(N): NorthM:=proc(N) local k: evalf(4*add((-1)^(k-1)/(2*k-1),k=1..N)): end: