Bonjour,
Leonard Euler (15.4.1707 - 18.9.1783) nous à légué la formule:
Pi/2 =
1 + 1/3 + 2/(3*5) + 2*3/(3*5*7) + 2*3*4/(3*5*7*9) + 2*3*4*5/(3*5*7*9*11) + ...
Elle permet de calculer Pi avec une précision "double" en 50 itérations.
Cet article fait partie de la série CodeS-SourceS:
Approximations de Pi.
Voici d'abord deux codes qui calculent explicitement le numérateur
num et le dénominateur
den des termes à ajouter, dont le seconde est écrit d'une manière plus condensée:
double Euler_A(int n) { // avec numérateur et dénominateur
double pi=1.0,num=1.0,den=1.0;
for (int i=1; i<n; ++i) {
num *= i;
den *= (2*i+1);
pi += num/den;
}
return 2*pi;
} // Pi/2 = 1 + 1/3 + 2/(3*5) + (2*3)/(3*5*7) + (2*3*4)/(3*5*7*9) + ...
double Euler_B(int n) { // plus condensé
double pi=1.0, num=1.0, den=1.0;
for (int i=1; i<n; ++i) pi += (num *= i)/(den *= (2*i+1));
return 2*pi;
} // Pi/2 = 1 + 1/3 + 2/(3*5) + (2*3)/(3*5*7) + (2*3*4)/(3*5*7*9) + ...
Nous pouvons remplacer
num/den par un seul facteur
fac:
double Euler_C(int n) { // avec un seul facteur
double pi=1.0, fac=1.0;
for (int i=1, j=1; i<n; ++i) pi += (fac *= (double)i/(j+=2));
return 2*pi;
} // Pi/2 = 1 + 1/3 + 2/(3*5) + (2*3)/(3*5*7) + (2*3*4)/(3*5*7*9) + ...
On rencontre aussi la formule d'Euler sous la forme factorisée:
Pi = 2 + (1/3)*(2 + (2/5)*(2 + (3/7)*(2 + (4/9)*(2 + (5/11)*(2 + ...)))))
Le code correspondant est tout simple:
double Euler_D(int n) { // factorisé
double pi=0.0;
for (int i=n-1; i>0; --i) pi = 2.0 + pi*i/(2*i+1);
return pi;
} // Pi = 2 + (1/3)*(2 + (2/5)*(2 + (3/7)*(2 + (4/9)*(2 + (5/11)*(2 + ...)))))
Le
Zip contient le fichier
Euler.cpp qui donne l'
Output suivant:
Euler_A: pi = 2*{1 + 1/3 + 2/(3*5) + (2*3)/(3*5*7) + (2*3*4)/(3*5*7*9) + ...}
n= 5: pi=3.09841269841270
n= 10: pi=3.14057816968034
n= 15: pi=3.14156615934495
n= 20: pi=3.14159192767515
n= 25: pi=3.14159263314403
n= 30: pi=3.14159265300348
n= 35: pi=3.14159265357277
n= 40: pi=3.14159265358929
n= 45: pi=3.14159265358978
n= 50: pi=3.14159265358979
precis: pi=3.14159265358979
Euler_B: pi = 2*{1 + 1/3 + 2/(3*5) + (2*3)/(3*5*7) + (2*3*4)/(3*5*7*9) + ...}
n= 5: pi=3.09841269841270
n= 10: pi=3.14057816968034
n= 15: pi=3.14156615934495
n= 20: pi=3.14159192767515
n= 25: pi=3.14159263314403
n= 30: pi=3.14159265300348
n= 35: pi=3.14159265357277
n= 40: pi=3.14159265358929
n= 45: pi=3.14159265358978
n= 50: pi=3.14159265358979
precis: pi=3.14159265358979
Euler_C: pi = 2*{1 + 1/3 + 2/(3*5) + (2*3)/(3*5*7) + (2*3*4)/(3*5*7*9) + ...}
n= 5: pi=3.09841269841270
n= 10: pi=3.14057816968034
n= 15: pi=3.14156615934495
n= 20: pi=3.14159192767515
n= 25: pi=3.14159263314403
n= 30: pi=3.14159265300348
n= 35: pi=3.14159265357277
n= 40: pi=3.14159265358929
n= 45: pi=3.14159265358978
n= 50: pi=3.14159265358979
precis: pi=3.14159265358979
Euler_D: pi = 2 + (1/3)*(2 + (2/5)*(2 + (3/7)*(2 + (4/9)*(2 + ...))))
n= 5: pi=3.04761904761905
n= 10: pi=3.13946968064615
n= 15: pi=3.14153799317348
n= 20: pi=3.14159116699150
n= 25: pi=3.14159261190884
n= 30: pi=3.14159265239821
n= 35: pi=3.14159265355526
n= 40: pi=3.14159265358878
n= 45: pi=3.14159265358976
n= 50: pi=3.14159265358979
precis: pi=3.14159265358979
Comme la formule d'Euler est souvent utilisée pour calculer une approximation de pi
à la main, j'ai ajouté au
Zip les fichiers Excel
Euler.xls ou
Euler.xlsx qui permettent de voir l'évolution des calculs avec numérateur et dénominateur.
Le fichier
EulerExcel.jpg en est un "PrintScreen".
Bonne lecture ...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.