ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Calcul du nombre π selon Machin         tester le programme "on line"

On se propose ici de calculer une (très bonne) valeur approchée de π au moyen de la formule de l'anglais John Machin dont la preuve est donnée ci-après :

Le développement en série de la fonction Arctan x, attribué à Gregory :

converge très lentement et calculer au moyen de ce développement lorsque x = 1 est peu efficace. Pour accélérer la convergence, Machin considéra x = 1/5 car si l'on pose u = Arctan(1/5), alors tan 4u est voisin de 1, donc 4u est voisin de π/4. En effet :

d'où tan 2u = 5/12 et tan 4u = 120/119. Posons v = 4u - π/4. On a alors :

d'où la formule de Machin vu que π/4 = 4u - v : 

Programmation en JavaScript de la formule :

Le développement de Arctan étant une série alternée, lorsque celle-ci est tronquée au rang n, le reste est inférieur, en valeur absolue, au terme de rang n + 1 : ceci nous permet d'évaluer l'erreur commise.

Noms des variables :



Le choix n = 5 conduit à π = 3,141592652615309 avec e < 1.10-9 (les décimales soulignées sont fausses : logique d'après le calcul de l'erreur).

Le choix de n = 10 conduit à π = 3,1415926535897926 avec e < 1,6.10-15.

Au-delà, on dépasse la capacité de traitement en double précision de l'ordinateur (15 décimales), lequel affiche constamment la même valeur π = 3,1415926535897944 : les deux derniers 4 sont faux, on devrait trouver 3,14159265358979323... La 16è décimale est nécessairement un arrondi du compilateur. La 15è n'est pas fiable, elle peut être victime d'une accumulation d'erreurs d'arrondis, tout comme le calcul de l'erreur...

 fonctions mathématiques usuelles
 

<SCRIPT LANGUAGE=JavaScript>
var x,y
function go()
{x=1/5;y=1/239;sn=0;nmax=5;e=0;
nmax=eval(prompt("n max = ",nmax))
for(n=0;n<=nmax;n++)
{sn=sn+Math.pow(-1,n)*uvw(n,0)}
err=4*uvw(nmax+1,1)
alert("pi = "+sn*4+"\n"+"err< "+err)
}

function uvw(n,e)
{
un=Math.pow(x,2*n+1)
vn=Math.pow(y,2*n+1)
wn=(4*un-vn)/(2*n+1);
if (e==1){wn=(4*un+vn)/(2*n+1)}
return wn
}
</SCRIPT>

Autres calculs de π dans ChronoMath :


© Serge Mehl - www.chronomath.com