Approximations de Pi: Fractions continues

Description

Bonjour,

En fait, il s'agit de fractions continues généralisées.
Le développement en fractions continues est souvent attribué à William Brounker (1620-1684).

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

Une première fraction continue induit le code suivant:
double Fraction_A(int n) {
  //                    1
  // Pi/4 = -----------------------
  //                    1^2
  //        1 + -------------------
  //                      3^2
  //            2 + ---------------
  //                        5^2
  //                2 + -----------
  //                          7^2
  //                    2 + -------
  //                        2 + ...
  double f=0;
  for (int i=2*n-1; i>0; i-=2) f = (float)i*i/(2 + f);
  return 4/(1 + f); // ~ pi
}
Malheureusement, avec 100'000 itérations, on n'obtient Pi qu'avec une précision de trois ou quatre chiffres après la virgule !

Une autre fraction continue donne un résultat un peu meilleur:
double Fraction_B(int n) {
  //                    1^2         
  // Pi = 3 + -----------------------
  //                      3^2
  //          6 + -------------------
  //                        5^2
  //              6 + ---------------
  //                          7^2
  //                  6 + -----------
  //                            9^2
  //                      6 + -------
  //                          6 + ...
  double f=0;
  for (int i=2*n-1; i>0; i-=2) f = (float)i*i/(6 + f);
  return 3+f; // ~ pi
}
Il lui faut environ 32000 itérations pour atteindre la précision double.

Le Zip contient le seul fichier source FractionContinue.cpp dont voici l'Output:
Fraction_A:
               1
Pi/4 = -----------------------
                   1^2
       1 + -------------------
                     3^2
           2 + ---------------
                       5^2
               2 + -----------
                         7^2
                   2 + -------
                       2 + ...

n=     1: pi=2.66666666666667
n=    10: pi=3.23231580940559
n=   100: pi=3.15149340107099
n=  1000: pi=3.14259165433954
n= 10000: pi=3.14169264359684
n=100000: pi=3.14160265349889
  precis: pi=3.14159265358979


Fraction_B:
                   1^2
Pi = 3 + -----------------------
                     3^2
         6 + -------------------
                       5^2
             6 + ---------------
                         7^2
                 6 + -----------
                           9^2
                     6 + -------
                         6 + ...

n= 2000: pi=3.14159265355859
n= 4000: pi=3.14159265358589
n= 6000: pi=3.14159265358864
n= 8000: pi=3.14159265358931
n=10000: pi=3.14159265358954
n=12000: pi=3.14159265358965
n=14000: pi=3.14159265358970
n=16000: pi=3.14159265358973
n=18000: pi=3.14159265358975
n=20000: pi=3.14159265358976
n=22000: pi=3.14159265358977
n=24000: pi=3.14159265358978
n=26000: pi=3.14159265358978
n=28000: pi=3.14159265358978
n=30000: pi=3.14159265358978
n=32000: pi=3.14159265358979
 precis: pi=3.14159265358979

Voir aussi
Wiki: Fraction continue.
pi314: Brounker.
 
 
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.