Approximations de Pi: Formules avec le nombre d'or

Description

Bonjour,

Nombre d'or: phi = (1 + sqrt(5)) / 2 = 1.618033988749...
J'ai trouvé deux formules équivalentes qui relient pi et le nombre d'or:

Pi = 4 * Somme(i>=0) [1/phi^(2*i+1) + 1/phi^(6*i+3)] * (-1)^i / (2*i+1)

Pi = 4 * Somme(i>=0) [(phi-1)^(2*i+1) + (2*phi-3)^(2*i+1)] * (-1)^i / (2*i+1)

Avec chacune, on obtient pi avec la précision double en 32 itérations.

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

Voici d'abord deux codes basés sur la première formule:
const double phi=(1+sqrt(5.0))/2, phi2=phi*phi, phi6=phi2*phi2*phi2;

double NombreOr_A(int n) {
  double pi=0, a=-phi, b=a*phi2;
  for (int i=0; i<n; ++i) {
    a/=-phi2;
    b/=-phi6;
    pi+=(a+b)/(2*i+1);
  }
  return 4*pi;
} // Pi = 4 * Somme(i>=0) (-1)^i / (2*i+1) * [1/phi^(2*i+1) + 1/phi^(6*i+3)]

double NombreOr_B(int n) { // concentré
  double pi=0, a=-phi, b=a*phi2;
  for (int i=0; i<n; ++i) pi+=((a/=-phi2)+(b/=-phi6))/(2*i+1);
  return 4*pi;
} // Pi = 4 * Somme(i>=0) (-1)^i / (2*i+1) * [1/phi^(2*i+1) + 1/phi^(6*i+3)]


Et deux autres basés sur la seconde formule:
Pi = 4 * Somme(i>=0) [(phi-1)^(2*i+1) + (2*phi-3)^(2*i+1)] * (-1)^i/(2*i+1)
const double phi=(1+sqrt(5.0))/2, phi1=phi-1, phi23=2*phi-3;

double NombreOr_C(int n) {
  double pi=0, a=-1/phi1, b=-1/(2*phi-3);
  for (int i=0; i<n; ++i) {
    a*=-phi1*phi1;
    b*=-phi23*phi23;
    pi+=(a+b)/(2*i+1);
  };
  return 4*pi;
} // Pi = 4 * Somme(i>=0) [(phi-1)^(2*i+1) + (2*phi-3)^(2*i+1)] * (-1)^i/(2*i+1)

double NombreOr_D(int n) { // concentré
  double pi=0, a=-1/phi1, b=-1/(2*phi-3);
  for (int i=1, N=2*n; i<N; i+=2) pi+=((a*=-phi1*phi1) + (b*=-phi23*phi23))/i;
  return 4*pi;
}


Le Zip contient le seul fichier source NombreOr.cpp dont voici l'Output:
NombreOr_A:
Pi = 4 * Somme(i>=0) [1/phi^(2*i+1) + 1/phi^(6*i+3)] * (-1)^i/(2*i+1)
  n= 4: pi=3.13712779751530
  n= 8: pi=3.14154350897122
  n=12: pi=3.14159194875965
  n=16: pi=3.14159264227952
  n=20: pi=3.14159265339661
  n=24: pi=3.14159265358636
  n=28: pi=3.14159265358973
  n=32: pi=3.14159265358979
precis: pi=3.14159265358979

NombreOr_B:
Pi = 4 * Somme(i>=0) [1/phi^(2*i+1) + 1/phi^(6*i+3)] * (-1)^i/(2*i+1)
  n= 4: pi=3.13712779751530
  n= 8: pi=3.14154350897122
  n=12: pi=3.14159194875965
  n=16: pi=3.14159264227952
  n=20: pi=3.14159265339661
  n=24: pi=3.14159265358636
  n=28: pi=3.14159265358973
  n=32: pi=3.14159265358979
precis: pi=3.14159265358979

NombreOr_C:
Pi = 4 * Somme(i>=0) [(phi-1)^(2*i+1) + (2*phi-3)^(2*i+1)] * (-1)^i/(2*i+1)
  n= 4: pi=3.13712779751530
  n= 8: pi=3.14154350897122
  n=12: pi=3.14159194875965
  n=16: pi=3.14159264227952
  n=20: pi=3.14159265339661
  n=24: pi=3.14159265358636
  n=28: pi=3.14159265358973
  n=32: pi=3.14159265358979
precis: pi=3.14159265358979

NombreOr_D:
Pi = 4 * Somme(i>=0) [(phi-1)^(2*i+1) + (2*phi-3)^(2*i+1)] * (-1)^i/(2*i+1)
  n= 4: pi=3.13712779751530
  n= 8: pi=3.14154350897122
  n=12: pi=3.14159194875965
  n=16: pi=3.14159264227952
  n=20: pi=3.14159265339661
  n=24: pi=3.14159265358636
  n=28: pi=3.14159265358973
  n=32: pi=3.14159265358979
precis: pi=3.14159265358979


Voir aussi
Wiki: Nombre d'or.
Des trucs et des maths: Une formule qui relie pi et le nombre d'or.


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.