Approximations de Pi: Formule de Machin

Soyez le premier à donner votre avis sur cette source.

Vue 4 204 fois - Téléchargée 166 fois

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

Ajouter un commentaire

Commentaire

pgl10
Messages postés
313
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Bonjour tous,
La formule de Machin, bien connue, est largement référencée sur Internet.
En voici une référence bien documentée : http://milan.milanovic.org/math/english/pi/machin.html
Et merci à William Voirol pour cette série de diverses méthodes de calcul de π.

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.