Bonjour,
Dans la suite de nombres de Fibonacci, chaque terme est la somme des deux termes qui le précèdent.
F0 = 0; F1 = 1; Fn = F(n-2) + F(n-1)
Ces nombres interviennent dans des formules pour calculer Pi:
Pi/4 = arctan(1)
Pi/4 =
arctan(1/2) + arctan(1/3)
Pi/4 =
arctan(1/2) + arctan(1/5) + arctan(1/8)
Pi/4 =
arctan(1/2) + arctan(1/5) + arctan(1/13) + arctan(1/21)
Pi/4 = ...
Pi/4 = Somme(i>=1)
arctan(1/F(2i+1))
Pi/4 = arctan(1/F2)
Pi/4 =
arctan(1/F3) + arctan(1/F4)
Pi/4 =
arctan(1/F3) + arctan(1/F5) + arctan(1/F6)
Pi/4 =
arctan(1/F3) + arctan(1/F5) + arctan(1/F7) + arctan(1/F8)
Pi/4 = ...
Pi/4 = Somme(i>=1)
arctan(1/F(2i+1))
Remarque: en
italique lorsque l'index est impair.
Cet article fait partie de la série
CodeS-SourceS: Approximations de Pi <<< cliquez !.
Comme dans tous les articles de cette série, on se limite à la précision
double, utilisons les deux lignes de code:
double fibo[1477]={0,1}; // pour couvrir tout le domaine "double"
for (int k=2; k<=1476; ++k) fibo[k] = fibo[k-2] + fibo[k-1];
pour calculer à l'avance tous les
nombres de Fibonacci de ce domaine.
Il faudra se veiller à ne pas dépasser fibo[1476], ce qui est largement le cas ici.
Les premières formules ci-dessus montrent que Pi/4 correspond à la somme des arctan() de l'inverse de quelques nombres de Fibonacci d'
index impairs, et de celui d'index pair suivant:
/*
k = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
F(k) = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...
n=0 p (p: index pair; i: impair)
n=1 i p
n=2 i i p
n=3 i i i p
n=4 i i i i p
n=5 i i i i i p
n=6 i i i i i i p
...
*/
double Fibonacci_P(int n) { // calcul précis
double s=0;
for (int i=1; i<=n; ++i) s += atan(1/fibo[2*i+1]);
return 4*(s + atan(1.0/fibo[2*n+2]));
}
Les résultats ne font que confirmer les formules ci-dessus, basées sur la relation:
arctan(1/F(2n)) = arctan(1/F(2n+1)) + arctan(1/F(2n+2)
La Somme(i>=1) infinie n'est pas à proprement parler une approximation de Pi, puisqu'on obtient un résultat précis avec une somme finie.
De plus, il faudrait aussi calculer l'arctangente à l'aide d'une somme (qui tend vers l'infini).
double Fibonacci_I(int n) { // calcul avec fibo[i]: index impairs
double s=0;
for (int i=1; i<=n; ++i) s += atan(1/fibo[2*i+1]);
return 4*s;
}
On trouve Pi avec une précision
double après 36 itérations.
Ce dernier code a peu d'utilité pratique pour calculer Pi, car on connait des combinaisons d'arctan bien plus efficaces que celles présentées ici.
Voir par exemple CodeS-SourceS:
Formule de Machin.
Le
Zip contient le seul fichier source
Fibonacci.cpp dont voici l'
Output:
Les premiers nombres de Fibonacci:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 ...
Fibonacci_P: pi = précis:
n= 0: pi=3.14159265358979
n= 1: pi=3.14159265358979
n= 2: pi=3.14159265358979
n= 3: pi=3.14159265358979
n= 4: pi=3.14159265358979
n= 5: pi=3.14159265358979
n= 6: pi=3.14159265358979
n= 7: pi=3.14159265358979
n= 8: pi=3.14159265358979
n= 9: pi=3.14159265358979
n= 10: pi=3.14159265358979
n= 11: pi=3.14159265358979
n= 12: pi=3.14159265358979
n= 13: pi=3.14159265358979
n= 14: pi=3.14159265358979
n= 15: pi=3.14159265358979
n= 16: pi=3.14159265358979
precis: pi=3.14159265358979
Fibonacci_I: index impairs seulement:
n= 2: pi=2.64417267540275
n= 4: pi=3.06887339329788
n= 6: pi=3.13098259889778
n= 8: pi=3.14004466605097
n= 10: pi=3.14136680524720
n= 12: pi=3.14155970276067
n= 14: pi=3.14158784612861
n= 16: pi=3.14159195219066
n= 18: pi=3.14159255125704
n= 20: pi=3.14159263865965
n= 22: pi=3.14159265141151
n= 24: pi=3.14159265327199
n= 26: pi=3.14159265354343
n= 28: pi=3.14159265358303
n= 30: pi=3.14159265358881
n= 32: pi=3.14159265358965
n= 34: pi=3.14159265358977
n= 36: pi=3.14159265358979
précis: pi=3.14159265358979
maths.surrey:
Pi and the Fibonacci Numbers
pi314:
L'univers de Pi: Fibonacci
Bonne lecture ...
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.