Approximations de Pi: Produit de Wallis

Description

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 ...

Codes Sources

A voir également

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.