Approximations de Pi: Formule de Machin

Description

La formule de John Machin, découverte en 1706, s'écrit:
pi/4 = 4*Arctan(1/5) - Arctan(1/239)
pi/4 = Somme(i>=0) (-1)^i) / (2*i+1) * [4*/5^(2*i+1) - 1/239^(2*i+1)]

Il l'utilisa pour calculer (à la main) les cent premières décimales de Pi.

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

Et voici un code classique, basé sur le développement en série entière de Arctan:
double Machin_A(int n) {
  double pi=0, a=-4*5, b=-239;
  for (int i=0; i<n; ++i) {
    a /= -5*5;
    b /= -239*239;
    pi += (a-b)/(2*i+1);
  }
  return pi*4;
} // pi = 4 * Somme(i>=0) (-1)^i) / (2*i+1) * [4*/5^(2*i+1) - 1/239^(2*i+1)]
Sa convergence semble rapide puisqu'il ne faut que 10 itérations pour calculer pi avec la précision double.

Le même code, mais plus condensé:
double Machin_B(int n) { // condensé
  double pi=0, a=-4*5, b=-239;
  for (int i=0; i<n; ++i) pi += ((a /= -25) - (b /= -57121))/(2*i+1);
  return pi*4;
} // pi = 4 * Somme(i>=0) (-1)^i) / (2*i+1) * [4*/5^(2*i+1) - 1/239^(2*i+1)]


Jusqu'à n=10, imprimons, à chaque itération, les valeurs des deux termes a = 4*/5^(2*i+1) et b = 1/239^(2*i+1):
double Machin_C(int n) { // Ne pas utiliser: impressions intermédiaires
  double pi=0, a=-4*5, b=-239;
  for (int i=0; i<n; ++i) {
    a /= -5*5;
    b /= -239*239;
    pi += (a-b)/(2*i+1);
    printf("Pi = %.14f, a = %17.14f, b = %17.14fn",4*pi,a,b);
  }
  return pi*4;
}
Nous constatons que b devient "négligeable" beaucoup plus tôt que a.
Il faudra nous en souvenir lors de calculs plus précis de Pi et "séparer" les sommes.

Le Zip contient le fichier Machin.cpp qui donne l'Output suivant:
Machin_A:
Pi = 4 * Somme(i>=0) (-1)^i / (2*i+1) * [4/5^(2*i+1) - 1/239^(2*i+1)]
  n=  1: Pi=3.18326359832636
  n=  2: Pi=3.14059702932606
  n=  3: Pi=3.14162102932504
  n=  4: Pi=3.14159177218218
  n=  5: Pi=3.14159268240440
  n=  6: Pi=3.14159265261531
  n=  7: Pi=3.14159265362356
  n=  8: Pi=3.14159265358860
  n=  9: Pi=3.14159265358984
  n= 10: Pi=3.14159265358979
 precis: pi=3.14159265358979

Machin_B:
Pi = 4 * Somme(i>=0) (-1)^i / (2*i+1) * [4/5^(2*i+1) - 1/239^(2*i+1)]
  n=  1: Pi=3.18326359832636
  n=  2: Pi=3.14059702932606
  n=  3: Pi=3.14162102932504
  n=  4: Pi=3.14159177218218
  n=  5: Pi=3.14159268240440
  n=  6: Pi=3.14159265261531
  n=  7: Pi=3.14159265362356
  n=  8: Pi=3.14159265358860
  n=  9: Pi=3.14159265358984
  n= 10: Pi=3.14159265358979
 precis: pi=3.14159265358979

Machin_C:
Pi = 3.18326359832636, a =  0.80000000000000, b =  0.00418410041841
Pi = 3.14059702932606, a = -0.03200000000000, b = -0.00000007324978
Pi = 3.14162102932504, a =  0.00128000000000, b =  0.00000000000128
Pi = 3.14159177218218, a = -0.00005120000000, b = -0.00000000000000
Pi = 3.14159268240440, a =  0.00000204800000, b =  0.00000000000000
Pi = 3.14159265261531, a = -0.00000008192000, b = -0.00000000000000
Pi = 3.14159265362356, a =  0.00000000327680, b =  0.00000000000000
Pi = 3.14159265358860, a = -0.00000000013107, b = -0.00000000000000
Pi = 3.14159265358984, a =  0.00000000000524, b =  0.00000000000000
Pi = 3.14159265358979, a = -0.00000000000021, b = -0.00000000000000


Dans Wiki: Formule de Machin, on peut découvrir des formules du type de Machin basées sur d'autres décompositions en Arctan.
 
 
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.