Bonjour,
La formule de Wallis n'est pas basée sur une somme, mais sur un produit infini:
Pi = 2*(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*(8/7)*(8/9)*...
Malheureusement, pour approcher Pi, elle n'est pas plus éfficace que la formule de Leibniz !
Cet article fait partie de la série
Approximations de Pi.
Voir également Wiki:
Produit de Wallis.
Voici un premier code correspondant au produit de Wallis:
double Wallis_A(int n) {
double p, pi=2.0;
for (int i=2; i<=n; i+=2) pi *= ((p=i)/(i-1))*(p/(i+1));
return pi;
} // Pi = 2*(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*(8/7)*...
On peut réunir deux facteurs consécutifs:
Pi = 2*(4/3)*(16/15)*(36/35)*(64/63)*...
double Wallis_B(int n) {
double p, pi=2.0;
for (int i=1; i<=n; ++i) pi *= (p=4.0*i*i)/(p-1);
return pi;
} // Pi = 2*{(4/3)*(16/15)*(36/35)*(64/63)*...}
Le
Zip contient le seul fichier source
Wallis.cpp dont voici l'
Output:
Wallis_A:
Pi = 2*(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*(8/7)*(8/9)*...
n= 10: pi=3.00217595455691
n= 100: pi=3.12607890021541
n= 1000: pi=3.14002381860058
n= 10000: pi=3.14143559358984
n= 100000: pi=3.14157694582272
n=1000000: pi=3.14159108279497
precis: pi=3.14159265358979
Wallis_B:
Pi = 2*(4/3)*(16/15)*(36/35)*(64/63)*...
n= 10: pi=3.06770380664350
n= 100: pi=3.13378749062816
n= 1000: pi=3.14080774603040
n= 10000: pi=3.14151411868196
n= 100000: pi=3.14158479965725
n=1000000: pi=3.14159186819215
precis: pi=3.14159265358979
Comme déjà mentionné, cette formule n'est pas du tout "éfficace" pour approcher Pi.
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.