Approximations de Pi: Algorithmes de Borwein

Description

Bonjour,

Pour les calculs de Pi, l'apport des frères Jonathon et Peter Borwein (nés en 1951 et 1953) est immense.
Nous allons voir ici trois algorithmes qui "multiplient" le nombre de décimales précises à chaque itération, comme sous (Algorithme de Brent-Salamin).

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

Convergence quadratique 1984

 
A chaque itération, on double le nombre de chiffres précis.

a[0] = sqrt(2)
b[0] = 0
p[0] = 2 + sqrt(2)

a[n+1] = (sqrt(a[n]) + 1/sqrt(a[n])) / 2
b[n+1] = (1 + b[n]) * sqrt(a[n]) / (a[n] + b[n])
p[n+1] = (1 + a[n+1]) * p[n] * b[n+1] / (1 + b[n+1])
double Borwein_2(int n) { // 1984
  double a=sqrt(2.0), b=0.0, p=2.0+a;
  for (int i=1; i<=n; ++i) {
    b = (1+b)*sqrt(a)/(a+b);
    a = sqrt(a);
    a = (a + 1.0/a)/2.0;
    p = (1+a)*p*b / (1+b);
  }
  return p;
} // chaque itération double le nombre de chiffres précis

Convergence cubique 1991

 
A chaque itération, on triple le nombre de chiffres précis.

p[0] = 1/3
y[0] = (sqrt(3) - 1) / 2

r = 3 / (1 + 2*(1 - y[n]^3)^(1/3))
y[n+1] = (r - 1) / 2
p[n+1] = r*r*p[n] - (r*r - 1)*3^n
double Borwein_3(int n) { // 1991
  double a=1.0/3.0, p=1.0, r, s=(sqrt(3.0)-1.0)/2.0;
  for (int i=1; i<=n; ++i) {
    r = 3.0 / (1.0 + 2.0*pow(1.0 - s*s*s, 1.0/3.0));
    s = (r-1.0)/2.0;
    a = r*r*a - p*(r*r - 1.0);
    p *= 3.0;
  }
  return 1.0/a;
} // chaque itération triple le nombre de chiffres précis

Convergence quartique (biquadratique) 1985

 
A chaque itération, on quadruple le nombre de chiffres précis.

p[0] = 6 - 4*sqrt(2)
y[0] = sqrt(2) - 1

y[n+1] = (1 - (1 - y[n]^4)) / (1 + (1 - y[n]^4))
p[n+1] = p[n] * ()^4 - y[n+1] * (1 + y[n+1] + y[n+1]^2) * 2^(2n+3)
double Borwein_4(int n) { // 1985
  double a=6.0-4.0*sqrt(2.0), p=2.0, q, y=sqrt(2.0)-1.0;
  for (int i=1; i<=n; ++i) {
    y = sqrt(sqrt(1.0 - y*y*y*y)); // sqrt(sqrt(x)) = pow(x, 0.25)
    y = (1.0-y) / (1.0+y);
    p *= 4.0;
    q = (1.0+y)*(1.0+y);
    a = a*q*q - p*y*(1.0 + y + y*y);
  }
  return 1.0/a;
} // chaque itération quadruple le nombre de chiffres précis


Le Zip contient le seul fichier source Borwein.cpp dont voici l'Output:
Borwein_2: 1984 chaque itération double le nombre de chiffres précis
  n= 1: pi=3.14260675394162
  n= 2: pi=3.14159266096604
  n= 3: pi=3.14159265358979
précis: pi=3.14159265358979

Borwein_3: 1991 chaque itération triple le nombre de chiffres précis
  n= 1: pi=3.14159058520590
  n= 2: pi=3.14159265358980
  n= 3: pi=3.14159265358980
précis: pi=3.14159265358979

Borwein_4: 1985 chaque itération quadruple le nombre de chiffres précis
  n= 1: pi=3.14159264621355
  n= 2: pi=3.14159265358981
  n= 3: pi=3.14159265358981
précis: pi=3.14159265358979


Wiki: Borwein's algorithm
Wiki: Algoritmo de Borwein
Mathematical Intelligencer: The Quest for 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.