tp7.mw

TP7 : les décimales de π en base16 

I. Découvertes automatiques 

Q1. Calcul des valeurs numériques 

> listvals:=[seq(Sum(1/16^k/(8*k+i),k=0..infinity),i=1..8)];
 

[Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity), Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity), Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `...
[Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity), Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity), Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `...
(1.1.1)
 

> Lvals:=evalf(listvals,100);
 

[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
[1.007184476414676228644760147450438496642965471945883113716436203172352390380898163527868944289585949, .50647687666743048095593942496123862717614116659874749483914012776947250538752309436870408069587...
(1.1.2)
 

Q2. La découverte 

> IntegerRelations[LinearDependency]([evalf(Pi,100),op(Lvals)],method=LLL);
 

[1, -4, 0, 0, 2, 1, 1, 0, 0] (1.2.1)
 

Q3. Une procédure de recherche d'identités 

> test:=proc(cte,listvals,prec) local lnum,rel; lnum:=evalf([cte,op(listvals)],prec);rel:=IntegerRelations[LinearDependency](lnum,method=LLL); if rel[1]<>0 then cte=add(-rel[i+1]/rel[1]*listvals[i],i=1..nops(listvals)) else 0=add(rel[i+1]*listvals[i],i=1..nops(listvals)) fi end;
 

proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
proc (cte, listvals, prec) local lnum, rel; `assign`(lnum, evalf([cte, op(listvals)], prec)); `assign`(rel, IntegerRelations[LinearDependency](lnum, method = LLL)); if `<>`(rel[1], 0) then cte = add(`...
(1.3.1)
 

> test(Pi,listvals,100);
 

Pi = `+`(`*`(4, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity))), `-`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 4)))), k = 0 .. infinity)))), `-`(...
Pi = `+`(`*`(4, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity))), `-`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 4)))), k = 0 .. infinity)))), `-`(...
(1.3.2)
 

Q4. Des identités pour ln(2), ln(3),... 

> for val in [ln(2),ln(3),ln(5),arctan(2),arctan(3),sqrt(2)*arctan(1/sqrt(2)),sqrt(2)*ln(1+sqrt(2))] do test(val,listvals,100) od;
 

 

 

 

 

 

 

ln(2) = `+`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity), `*`(`/`(1, 2), `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 4)))), k = 0 .. infinity))), `*`(`/`(1, ...
ln(2) = `+`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity), `*`(`/`(1, 2), `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 4)))), k = 0 .. infinity))), `*`(`/`(1, ...
ln(3) = `+`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity))), `*`(`/`(1, 2), `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 6)))), k = 0 .. infinity)))...
ln(5) = `+`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity))), `*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 4)))), k = 0 .. infinity))), `*`(`/...
arctan(2) = `+`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity))), `-`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity)), `-`(Sum(`/...
arctan(2) = `+`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity))), `-`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity)), `-`(Sum(`/...
arctan(3) = `+`(`-`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity)), `*`(3, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity))), Sum(`/`(1,...
arctan(3) = `+`(`-`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity)), `*`(3, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity))), Sum(`/`(1,...
`*`(`^`(2, `/`(1, 2)), `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))) = `+`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity), Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(...
`*`(`^`(2, `/`(1, 2)), `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))) = `+`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 2)))), k = 0 .. infinity), Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(...
`*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(1, `*`(`^`(2, `/`(1, 2))))))) = `+`(`-`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity)))), `*`(3, `*`(Sum(`/`(1, `*`(`^`(16, ...
`*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(1, `*`(`^`(2, `/`(1, 2))))))) = `+`(`-`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity)))), `*`(3, `*`(Sum(`/`(1, `*`(`^`(16, ...
`*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(1, `*`(`^`(2, `/`(1, 2))))))) = `+`(`-`(`*`(2, `*`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity)))), `*`(3, `*`(Sum(`/`(1, `*`(`^`(16, ...
(1.4.1)
 

Q5. Autres constantes, autres identités 

> L:=[seq(seq(Sum(2^(-j*i)/i^m,i=1..infinity),j=1..6),m=1..5)];
 

[Sum(`/`(`*`(`^`(2, `+`(`-`(i)))), `*`(i)), i = 1 .. infinity), Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(2, `*`(i)))))), `*`(i)), i = 1 .. infinity), Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(3, `*`(i)))))), `*`(i)), i = ...
[Sum(`/`(`*`(`^`(2, `+`(`-`(i)))), `*`(i)), i = 1 .. infinity), Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(2, `*`(i)))))), `*`(i)), i = 1 .. infinity), Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(3, `*`(i)))))), `*`(i)), i = ...
[Sum(`/`(`*`(`^`(2, `+`(`-`(i)))), `*`(i)), i = 1 .. infinity), Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(2, `*`(i)))))), `*`(i)), i = 1 .. infinity), Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(3, `*`(i)))))), `*`(i)), i = ...
[Sum(`/`(`*`(`^`(2, `+`(`-`(i)))), `*`(i)), i = 1 .. infinity), Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(2, `*`(i)))))), `*`(i)), i = 1 .. infinity), Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(3, `*`(i)))))), `*`(i)), i = ...
(1.5.1)
 

> test(Pi^2,L,100);
 

0 = `+`(Sum(`/`(`*`(`^`(2, `+`(`-`(i)))), `*`(i)), i = 1 .. infinity), `-`(`*`(2, `*`(Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(2, `*`(i)))))), `*`(i)), i = 1 .. infinity)))), `-`(Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(... (1.5.2)
 

Cette identité pour 0 gêne la suite de la recherche. Il suffit pour s'en débarasser d'enlever un des éléments liés par cette relation. 

> L:=subsop(6=NULL,L):
 

> test(Pi^2,L,100);
 

`*`(`^`(Pi, 2)) = `+`(`*`(36, `*`(Sum(`/`(`*`(`^`(2, `+`(`-`(i)))), `*`(`^`(i, 2))), i = 1 .. infinity))), `-`(`*`(36, `*`(Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(2, `*`(i)))))), `*`(`^`(i, 2))), i = 1 .. infi... (1.5.3)
 

> test(ln(7),L,100);
 

ln(7) = `+`(`*`(3, `*`(Sum(`/`(`*`(`^`(2, `+`(`-`(i)))), `*`(i)), i = 1 .. infinity))), `-`(Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(3, `*`(i)))))), `*`(i)), i = 1 .. infinity))) (1.5.4)
 

> test(ln(2)^2,L,100);
 

`*`(`^`(ln(2), 2)) = `+`(`*`(4, `*`(Sum(`/`(`*`(`^`(2, `+`(`-`(i)))), `*`(`^`(i, 2))), i = 1 .. infinity))), `-`(`*`(6, `*`(Sum(`/`(`*`(`^`(2, `+`(`-`(`*`(2, `*`(i)))))), `*`(`^`(i, 2))), i = 1 .. inf... (1.5.5)
 

II. Preuves 

Q6. Les sommes S[j](z) 

> Sum(t^(8*i+j)/(8*i+j),i=0..infinity);
 

Sum(`/`(`*`(`^`(t, `+`(`*`(8, `*`(i)), j))), `*`(`+`(`*`(8, `*`(i)), j))), i = 0 .. infinity) (2.1.1)
 

> diff(%,t);
 

Sum(`/`(`*`(`^`(t, `+`(`*`(8, `*`(i)), j))), `*`(t)), i = 0 .. infinity) (2.1.2)
 

> diffS:=value(%);
 

`+`(`-`(`/`(`*`(`^`(t, `+`(`-`(1), j))), `*`(`+`(`*`(`^`(t, 8)), `-`(1)))))) (2.1.3)
 

> for jj to 8 do S[jj]:=int(subs(j=jj,diffS),t=0..z) assuming 0<z,z<1 od;
 

 

 

 

 

 

 

 

`+`(`*`(`/`(1, 4), `*`(arctanh(z))), `*`(`/`(1, 4), `*`(arctan(z))), `*`(`/`(1, 16), `*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(`*`(`^`(2, `/`(1, 2)), `*`(z)), 1, `*`(`^`(z, 2))))))), `-`(`*`(`/`(1, 16), `*`(`...
`+`(`*`(`/`(1, 4), `*`(arctanh(z))), `*`(`/`(1, 4), `*`(arctan(z))), `*`(`/`(1, 16), `*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(`*`(`^`(2, `/`(1, 2)), `*`(z)), 1, `*`(`^`(z, 2))))))), `-`(`*`(`/`(1, 16), `*`(`...
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `-`(`*`(`/`(1, 8), `*`(ln(`+`(z, 1))))), `*`(`/`(1, 8), `*`(ln(`+`(`*`(`^`(z, 2)), 1)))), `*`(`/`(1, 4), `*`(arctan(`*`(`^`(z, 2))))))
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `*`(`/`(1, 8), `*`(ln(`+`(z, 1)))), `-`(`*`(`/`(1, 4), `*`(arctan(z)))), `-`(`*`(`/`(1, 16), `*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(`*`(`^`(2, `/`(1, 2)), ...
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `*`(`/`(1, 8), `*`(ln(`+`(z, 1)))), `-`(`*`(`/`(1, 4), `*`(arctan(z)))), `-`(`*`(`/`(1, 16), `*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(`*`(`^`(2, `/`(1, 2)), ...
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `-`(`*`(`/`(1, 8), `*`(ln(`+`(z, 1))))), `-`(`*`(`/`(1, 8), `*`(ln(`+`(`*`(`^`(z, 2)), 1))))), `*`(`/`(1, 8), `*`(ln(`+`(`*`(`^`(z, 4)), 1)))))
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `*`(`/`(1, 8), `*`(ln(`+`(z, 1)))), `*`(`/`(1, 4), `*`(arctan(z))), `-`(`*`(`/`(1, 16), `*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(`*`(`^`(2, `/`(1, 2)), `*`(z...
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `*`(`/`(1, 8), `*`(ln(`+`(z, 1)))), `*`(`/`(1, 4), `*`(arctan(z))), `-`(`*`(`/`(1, 16), `*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(`*`(`^`(2, `/`(1, 2)), `*`(z...
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `-`(`*`(`/`(1, 8), `*`(ln(`+`(z, 1))))), `*`(`/`(1, 8), `*`(ln(`+`(`*`(`^`(z, 2)), 1)))), `-`(`*`(`/`(1, 4), `*`(arctan(`*`(`^`(z, 2)))))))
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `*`(`/`(1, 8), `*`(ln(`+`(z, 1)))), `-`(`*`(`/`(1, 4), `*`(arctan(z)))), `*`(`/`(1, 16), `*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(`*`(`^`(2, `/`(1, 2)), `*`(...
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `*`(`/`(1, 8), `*`(ln(`+`(z, 1)))), `-`(`*`(`/`(1, 4), `*`(arctan(z)))), `*`(`/`(1, 16), `*`(`^`(2, `/`(1, 2)), `*`(ln(`+`(`*`(`^`(2, `/`(1, 2)), `*`(...
`+`(`-`(`*`(`/`(1, 8), `*`(ln(`+`(1, `-`(z)))))), `-`(`*`(`/`(1, 8), `*`(ln(`+`(z, 1))))), `-`(`*`(`/`(1, 8), `*`(ln(`+`(`*`(`^`(z, 2)), 1))))), `-`(`*`(`/`(1, 8), `*`(ln(`+`(`*`(`^`(z, 4)), 1)))))) (2.1.4)
 

Q7. Les sommes Sigma[j] et la preuve 

> for j to 8 do Sigma[j]:=simplify(eval(S[j]/z^j,z=(1/16)^(1/8))) od;
 

 

 

 

 

 

 

 

`+`(`*`(`/`(1, 16), `*`(`+`(`*`(4, `*`(arctanh(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))), `*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))), `*`(2, `*`(`^`(2, `/`(1, 2)), `*`(arcta...
`+`(`*`(`/`(1, 4), `*`(ln(2))), `-`(`*`(`/`(1, 4), `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2))))))))), `-`(`*`(`/`(1, 4), `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `*`(`/`(1, 4), `*`(ln(3))), `*`(`/`(1, ...
`+`(`-`(`*`(`/`(1, 8), `*`(`+`(`*`(2, `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(2, `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))...
`+`(`-`(`*`(`/`(1, 8), `*`(`+`(`*`(2, `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(2, `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))...
`+`(`*`(`/`(1, 2), `*`(ln(2))), `-`(`*`(`/`(1, 2), `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2))))))))), `-`(`*`(`/`(1, 2), `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(`/`(1, 2), `*`(ln(3)))), `*`(`/...
`+`(`-`(`*`(`/`(1, 4), `*`(`+`(`*`(2, `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(2, `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)...
`+`(`-`(`*`(`/`(1, 4), `*`(`+`(`*`(2, `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(2, `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)...
`+`(ln(2), `-`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2))))))), `-`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))), ln(3), `-`(`*`(2, `*`(arctan(`/`(1, 2))))))
`+`(`-`(`*`(`/`(1, 2), `*`(`+`(`*`(2, `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(2, `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))...
`+`(`-`(`*`(`/`(1, 2), `*`(`+`(`*`(2, `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(2, `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))...
`+`(`*`(10, `*`(ln(2))), `-`(`*`(2, `*`(ln(`+`(2, `-`(`*`(`^`(2, `/`(1, 2))))))))), `-`(`*`(2, `*`(ln(`+`(2, `*`(`^`(2, `/`(1, 2)))))))), `-`(`*`(2, `*`(ln(3)))), `-`(`*`(2, `*`(ln(5))))) (2.2.1)
 

vérification 

> for j to 8 do evalf(Sigma[j]-listvals[j],100) od;
 

 

 

 

 

 

 

 

0.
0.
0.
0.1e-99
0.7e-99
0.1e-99
0.12e-98
-0.12e-98 (2.2.2)
 

> 4*Sigma[1]-2*Sigma[4]-Sigma[5]-Sigma[6];
 

`+`(`*`(`/`(1, 4), `*`(`+`(`*`(4, `*`(arctanh(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))), `*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))), `*`(2, `*`(`^`(2, `/`(1, 2)), `*`(arctan...
`+`(`*`(`/`(1, 4), `*`(`+`(`*`(4, `*`(arctanh(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))), `*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))), `*`(2, `*`(`^`(2, `/`(1, 2)), `*`(arctan...
`+`(`*`(`/`(1, 4), `*`(`+`(`*`(4, `*`(arctanh(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))), `*`(4, `*`(arctan(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))), `*`(2, `*`(`^`(2, `/`(1, 2)), `*`(arctan...
(2.2.3)
 

> convert(%,ln);
 

`+`(`*`(`/`(1, 4), `*`(`+`(`*`(2, `*`(ln(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))), 1)))), `-`(`*`(2, `*`(ln(`+`(1, `-`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))))), `*`(`*`(2, `*`(I)), `*`(`+`(ln(`+...
`+`(`*`(`/`(1, 4), `*`(`+`(`*`(2, `*`(ln(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))), 1)))), `-`(`*`(2, `*`(ln(`+`(1, `-`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))))), `*`(`*`(2, `*`(I)), `*`(`+`(ln(`+...
`+`(`*`(`/`(1, 4), `*`(`+`(`*`(2, `*`(ln(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))), 1)))), `-`(`*`(2, `*`(ln(`+`(1, `-`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))))), `*`(`*`(2, `*`(I)), `*`(`+`(ln(`+...
`+`(`*`(`/`(1, 4), `*`(`+`(`*`(2, `*`(ln(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))), 1)))), `-`(`*`(2, `*`(ln(`+`(1, `-`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))))), `*`(`*`(2, `*`(I)), `*`(`+`(ln(`+...
`+`(`*`(`/`(1, 4), `*`(`+`(`*`(2, `*`(ln(`+`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))), 1)))), `-`(`*`(2, `*`(ln(`+`(1, `-`(`*`(`/`(1, 2), `*`(`^`(2, `/`(1, 2)))))))))), `*`(`*`(2, `*`(I)), `*`(`+`(ln(`+...
(2.2.4)
 

> combine(%,ln);
 

Pi (2.2.5)
 

III. Calcul rapide de décimales 

Q8. Exponentiation binaire 

> expbin:=proc(m,k) local q,r,rec; if m=0 then 1 else q:=iquo(m,2,r); rec:=expbin(q,k)^2 mod k; if r=0 then rec else 16*rec mod k fi fi end;
 

>
 










(3.1.1)
 

> seq(expbin(i,37),i=1..10);
 

16, 34, 26, 9, 33, 10, 12, 7, 1, 16 (3.1.2)
 

> seq(16^i mod 37,i=1..10);
 

16, 34, 26, 9, 33, 10, 12, 7, 1, 16 (3.1.3)
 

L'efficacité de expbin est handicapée par le fait que l'execution mène à de nombreux calculs sur des petits entiers, et donc coûte cher à un langage interprêté comme Maple. Il vaut mieux recourir à une version écrite dans le noyau (donc en C), pour la suite : 

> seq(`&^`(16,i) mod 37,i=1..10);
 

16, 34, 26, 9, 33, 10, 12, 7, 1, 16 (3.1.4)
 

Q9. Les sommes 

> S1:=proc(N,q,p,k) local s, i, modulo, res; if q=0 then 0 else s:=1./eval(p,k=N);for i from 0 to N-1 do modulo:=eval(p,k=i); s:=s+(`&^`(16,N-i) mod modulo)/modulo od; res:=frac(q*s); if res<0 then 1+res else res fi fi end;
 

proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
proc (N, q, p, k) local s, i, modulo, res; if q = 0 then 0 else `assign`(s, `/`(`*`(1.), `*`(eval(p, k = N)))); for i from 0 to `+`(N, `-`(1)) do `assign`(modulo, eval(p, k = i)); `assign`(s, `+`(s, `...
(3.2.1)
 

> S2:=proc(N,q,p,k) local s,i; evalf(Sum(q/16^(i-N)/subs(k=i,p),i=N+1..infinity)) end;
 

proc (N, q, p, k) local s, i; evalf(Sum(`/`(`*`(q), `*`(`^`(16, `+`(i, `-`(N))), `*`(subs(k = i, p)))), i = `+`(N, 1) .. infinity)) end proc
proc (N, q, p, k) local s, i; evalf(Sum(`/`(`*`(q), `*`(`^`(16, `+`(i, `-`(N))), `*`(subs(k = i, p)))), i = `+`(N, 1) .. infinity)) end proc
proc (N, q, p, k) local s, i; evalf(Sum(`/`(`*`(q), `*`(`^`(16, `+`(i, `-`(N))), `*`(subs(k = i, p)))), i = `+`(N, 1) .. infinity)) end proc
proc (N, q, p, k) local s, i; evalf(Sum(`/`(`*`(q), `*`(`^`(16, `+`(i, `-`(N))), `*`(subs(k = i, p)))), i = `+`(N, 1) .. infinity)) end proc
(3.2.2)
 

vérification 

> S1(0,1,8*n+1,n);
 

0. (3.2.3)
 

> S2(0,1,8*n+1,n);
 

0.7184476415e-2 (3.2.4)
 

> listvals[1]-%-%%;
 

`+`(Sum(`/`(1, `*`(`^`(16, k), `*`(`+`(`*`(8, `*`(k)), 1)))), k = 0 .. infinity), `-`(0.7184476415e-2)) (3.2.5)
 

> evalf(%);
 

.9999999996 (3.2.6)
 

> S1(0,1,8*n+2,n);
 

.5000000000 (3.2.7)
 

> S2(0,1,8*n+2,n);
 

0.6476876667e-2 (3.2.8)
 

> evalf(listvals[2]-%-%%);
 

0. (3.2.9)
 

Q10. La procédure finale 

> somme:=proc(N,B) local j, k; frac(add(S1(N,B[j],8*k+j,k)+S2(N,B[j],8*k+j,k),j=1..8)) end;
 

proc (N, B) local j, k; frac(add(`+`(S1(N, B[j], `+`(`*`(8, `*`(k)), j), k), S2(N, B[j], `+`(`*`(8, `*`(k)), j), k)), j = 1 .. 8)) end proc
proc (N, B) local j, k; frac(add(`+`(S1(N, B[j], `+`(`*`(8, `*`(k)), j), k), S2(N, B[j], `+`(`*`(8, `*`(k)), j), k)), j = 1 .. 8)) end proc
proc (N, B) local j, k; frac(add(`+`(S1(N, B[j], `+`(`*`(8, `*`(k)), j), k), S2(N, B[j], `+`(`*`(8, `*`(k)), j), k)), j = 1 .. 8)) end proc
proc (N, B) local j, k; frac(add(`+`(S1(N, B[j], `+`(`*`(8, `*`(k)), j), k), S2(N, B[j], `+`(`*`(8, `*`(k)), j), k)), j = 1 .. 8)) end proc
(3.3.1)
 

> listpi:=[4,0,0,-2,-1,-1,0,0];
 

[4, 0, 0, -2, -1, -1, 0, 0] (3.3.2)
 

> somme(0,listpi);
 

.141592653 (3.3.3)
 

> evalf(Pi-%);
 

3.000000001 (3.3.4)
 

> Digits:=100:
 

> evalf(Pi-somme(0,listpi));
 

3.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
3.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(3.3.5)
 

Donc ça fonctionne bien quand on part du tout début.
Voici la valeur du reste de π à partir du 10ième chiffre en base 16 :
 

> evalf(frac(16^10*Pi));
 

.636853401339558117442077379716553238538838432414171999775905323908215021649521559926994
.636853401339558117442077379716553238538838432414171999775905323908215021649521559926994
(3.3.6)
 

> somme(10,listpi);
 

.636853401339558117442077379716553238538838432414171999775905323908215021649521559926993507004094313
.636853401339558117442077379716553238538838432414171999775905323908215021649521559926993507004094313
(3.3.7)
 

> %-%%;
 

-0.492995905687e-87 (3.3.8)
 

> sommefinale:=proc(N,B,k) local bk; Digits:=k*(ilog10(16)+1)+max(ilog2(N),1);bk:=somme(N,B); convert(trunc(16^k*bk),base,16) end;
 

proc (N, B, k) local bk; `assign`(Digits, `+`(`*`(k, `*`(`+`(ilog10(16), 1))), max(ilog2(N), 1))); `assign`(bk, somme(N, B)); convert(trunc(`*`(`^`(16, k), `*`(bk))), base, 16) end proc
proc (N, B, k) local bk; `assign`(Digits, `+`(`*`(k, `*`(`+`(ilog10(16), 1))), max(ilog2(N), 1))); `assign`(bk, somme(N, B)); convert(trunc(`*`(`^`(16, k), `*`(bk))), base, 16) end proc
proc (N, B, k) local bk; `assign`(Digits, `+`(`*`(k, `*`(`+`(ilog10(16), 1))), max(ilog2(N), 1))); `assign`(bk, somme(N, B)); convert(trunc(`*`(`^`(16, k), `*`(bk))), base, 16) end proc
proc (N, B, k) local bk; `assign`(Digits, `+`(`*`(k, `*`(`+`(ilog10(16), 1))), max(ilog2(N), 1))); `assign`(bk, somme(N, B)); convert(trunc(`*`(`^`(16, k), `*`(bk))), base, 16) end proc
proc (N, B, k) local bk; `assign`(Digits, `+`(`*`(k, `*`(`+`(ilog10(16), 1))), max(ilog2(N), 1))); `assign`(bk, somme(N, B)); convert(trunc(`*`(`^`(16, k), `*`(bk))), base, 16) end proc
proc (N, B, k) local bk; `assign`(Digits, `+`(`*`(k, `*`(`+`(ilog10(16), 1))), max(ilog2(N), 1))); `assign`(bk, somme(N, B)); convert(trunc(`*`(`^`(16, k), `*`(bk))), base, 16) end proc
(3.3.9)
 

Les 20 premières à partir de 0 (il faut lire en partant de la fin) : 

> sommefinale(0,listpi,20);
 

[9, 1, 3, 1, 3, 13, 8, 0, 3, 10, 5, 8, 8, 8, 10, 6, 15, 3, 4, 2] (3.3.10)
 

les 10 premières : 

> sommefinale(0,listpi,10);
 

[5, 8, 8, 8, 10, 6, 15, 3, 4, 2] (3.3.11)
 

les 10 suivantes : 

> sommefinale(10,listpi,10);
 

[9, 1, 3, 1, 3, 13, 8, 0, 3, 10] (3.3.12)
 

> %%%-[op(%),op(%%)];
 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] (3.3.13)
 

Quelques tests de temps : les 5 premières décimales à partir de la 1e, 10e, 100e,... 

> for i to 6 do st:=time(); print(i,sommefinale(10^i,listpi,5),time()-st) od:
 

 

 

 

 

 

1, [13, 8, 0, 3, 10], 0.5e-2
2, [12, 7, 11, 9, 2], 0.9e-2
3, [12, 1, 15, 9, 4], 0.33e-1
4, [15, 8, 12, 10, 8], .287
5, [1, 10, 14, 5, 3], 3.381
6, [14, 5, 6, 12, 6], 36.310 (3.3.14)
 

À la fin, en un peu plus de 30 secondes de calcul, des décimales au-delà de la  millionième ont été obtenues. 

Pour le calcul de π, où les dénominateurs sont des `+`(`*`(8, `*`(i)), j), il est possible d'améliorer un peu les temps de calculs en utilisant add au lieu d'une boucle : 

> S1:=proc(N,q,p,k) local s, i, modulo, ini, res; if q = 0 then 0 else ini:=eval(p,k=0);s:=add(1.*(`&^`(16,N-i) mod (8*i+ini))/(8*i+ini),i=0..N);res:=frac(q*s); if res<0 then res+1 else res fi fi end;
 

proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
proc (N, q, p, k) local s, i, modulo, ini, res; if q = 0 then 0 else `assign`(ini, eval(p, k = 0)); `assign`(s, add(`/`(`*`(1., `*`(`mod`(`&^`(16, `+`(N, `-`(i))), `+`(`*`(8, `*`(i)), ini)))), `*`(`+`...
(3.3.15)
 

> st:=time():sommefinale(10^6,listpi,5),time()-st;
 

[14, 5, 6, 12, 6], 23.135 (3.3.16)
 

>
 

Q11. Complexité 

La complexité est approximativement linéaire en N, et elle est reflétée par les temps de calcul qui doublent à peu près en doublant N. Plus précisément, chaque exponentiation binaire prend O(log(N)) étapes, chaque étape étant une opération modulo un entier de taille O(`*`(log, `*`(N))). Au total, le temps de calcul est donc dominé par , où M(T) est le temps utilisé pour multiplier deux entiers de taille C'est donc du O(`*`(`*`(N, `*`(`^`(log, 3))), N))avec une multiplication naïve, ou du O(`*`(`*`(`*`(`*`(`*`(`*`(`*`(N, `*`(`^`(log, 2))), N), `*`(log)), log), `*`(N, `*`(log))), log), `*`(log, `*`(N)))) avec de la FFT.  

Ainsi, cette méthode n'est pas théoriquement meilleure que les meilleurs algorithmes pour Pi à base de moyenne arithmético-géométrique et de FFT, qui calculent toutes les N premières décimales. 

Par contre, la consommation mémoire de la méthode présentée ici est négligeable, et une multiplication rapide n'est pas nécessaire pour obtenir des résultats.