Approximations de Pi: Formule de Ramanujan

Description

Bonjour,

Voici une des nombreuses formules de Ramanujan pour le calcul de pi:

1/pi = sqrt(8)/9801 * somme(i>=0) {(4*i)! * (1103+26390*i) / (i!)^4 / 396^(4*i)}

Elle date de 1910 mais ne fut démontrée qu'en 1985.

Cet article fait partie de la série CodeS-SourceS: Approximations de Pi.

Comme dans tous les articles de cette série, on se limite à la précision double, utilisons les deux lignes de code:
double fact[171]={1}; // pour couvrir tout le domaine "double"

for (int i=1; i<=170; ++i) fact[i]=i*fact[i-1];
pour calculer à l'avance toutes les factorielles de ce domaine.
Il faudra par contre se veiller à ne pas dépasser 170! .

La programmation d'un code correspondant à la formule est "assez" simple:
double Ramanujan_A(int n) {
  double s=0;
  for (int i=0; i<n; ++i)
    s += fact[4*i] * (1103.0+26390.0*i) / pow(fact[i],4) / pow(396.0,4*i);
  return 9801.0/sqrt(8.0)/s;
} // 1/pi = sqrt(8)/9801 * somme(i>=0) {(4*i)!*(1103+26390*i)/(i!)^4/396^(4*i)}
Comme vous pouvez le constater par vous-même, on trouve Pi avec une précision double après 2 itérations seulement !

Ajout par rapport au texte initial
La programmation de Formule de Chudnovsky m'a incité à écrire le code suivant:
double Ramanujan_B(int n) {
  double a=1.0, sa=1.0, sb=0.0;
  for (int i=1; i<n; ++i) {
    a *= (4*i-3)*(4*i-2)*(4*i-1);
    sa += (a /= 6147814464.0*i*i*i);
    sb += a*i;
  }
  return 9801.0/sqrt(8.0)/(1103.0*sa + 26390.0*sb);
}
Il permet d'approcher Pi sans explicitement calculer les factorielles.

Le Zip contient le seul fichier source Ramanujan.cpp dont voici l'Output:
1/pi=sqrt(8)/9801*somme(i>=0)(4*i)!*(1103+26390*i)/(i!)^4/396^(4*i)

Ramanujan_A:
  n= 1: pi=3.14159273001331
  n= 2: pi=3.14159265358979
  n= 3: pi=3.14159265358979
précis: pi=3.14159265358979

Ramanujan_B:
  n= 1: pi=3.14159273001331
  n= 2: pi=3.14159265358979
  n= 3: pi=3.14159265358979
précis: pi=3.14159265358979


pi314: L'univers de Pi: Srinivasa Ramanujan
Newcastle: RAMANUJAN AND PI
Wiki: Ramanujan?Sato series
 
 
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.