Approximations de Pi: Formule de Newton

Description

Bonjour,

Voici la formule de Newton:
Pi/6 = 1/1/2 + 1/2/(3*2^3) + (1*3)/(2*4)/(5*2^5) + (1*3*5)/(2*4*6)/(7*2^7) + ...
Elle converge assez rapidement puisqu'on obtient la précision double avec 22 itérations.

Cet article fait partie de la série Approximations de Pi.

Donnons un premier code correspondant à cette formule:
double Newton_A(int n) {
  double pi=0.5, num=1.0, den=1.0, exp=2.0;
  for (int i=1; i<n; ++i) {
    num *= 2*i-1;
    den *= 2*i;
    exp *= 4;
    pi += num/den/((2*i+1)*exp);
  }
  return 6*pi;
} // Pi/6 = 1/2 + 1/2/(3*2^3) + 3/(2*4)/(5*2^5) + (3*5)/(2*4*6)/(7*2^7) + ...


Remplaçons num/den/exp par la seule variable fac et évitons les calculs de 2*i:
double Newton_B(int n) { // avec un seul facteur et sans calculs de 2*i
  double pi=0.5, fac=0.5;
  for (int i=2, N=2*n; i<N; i+=2) {
    fac *= (double)(i-1)/i/4;
    pi += fac/(i+1);
  }
  return 6*pi;
} // Pi/6 = 1/2 + 1/2/(3*2^3) + 3/(2*4)/(5*2^5) + (3*5)/(2*4*6)/(7*2^7) + ...


Ce qui donne en plus condensé:
double Newton_C(int n) { // en plus condensé
  double pi=0.5, fac=0.5;
  for (int i=2, N=2*n; i<N; i+=2) pi += (fac *= (double)(i-1)/i/4)/(i+1);
  return 6*pi;
} // Pi/6 = 1/2 + 1/2/(3*2^3) + 3/(2*4)/(5*2^5) + (3*5)/(2*4*6)/(7*2^7) + ...


Le Zip contient le seul fichier source Newton.cpp qui donne l'Output suivant:
pi = 6*{1/2 + 1/2/(3*2^3) + 3/(2*4)/(5*2^5) + (3*5)/(2*4*6)/(7*2^7) + ...}

Newton_A:
  n=  2: pi=3.12500000000000
  n=  4: pi=3.14115513392857
  n=  6: pi=3.14157671577487
  n=  8: pi=3.14159198235838
  n= 10: pi=3.14159262287062
  n= 12: pi=3.14159265210589
  n= 14: pi=3.14159265351534
  n= 16: pi=3.14159265358595
  n= 18: pi=3.14159265358959
  n= 20: pi=3.14159265358978
  n= 22: pi=3.14159265358979
 precis: pi=3.14159265358979

Newton_B:
  n=  2: pi=3.12500000000000
  n=  4: pi=3.14115513392857
  n=  6: pi=3.14157671577487
  n=  8: pi=3.14159198235838
  n= 10: pi=3.14159262287062
  n= 12: pi=3.14159265210589
  n= 14: pi=3.14159265351534
  n= 16: pi=3.14159265358595
  n= 18: pi=3.14159265358959
  n= 20: pi=3.14159265358978
  n= 22: pi=3.14159265358979
 precis: pi=3.14159265358979

Newton_C:
  n=  2: pi=3.12500000000000
  n=  4: pi=3.14115513392857
  n=  6: pi=3.14157671577487
  n=  8: pi=3.14159198235838
  n= 10: pi=3.14159262287062
  n= 12: pi=3.14159265210589
  n= 14: pi=3.14159265351534
  n= 16: pi=3.14159265358595
  n= 18: pi=3.14159265358959
  n= 20: pi=3.14159265358978
  n= 22: pi=3.14159265358979
 precis: pi=3.14159265358979


Voir aussi: Constante 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.