Bonjour,
La formule de Leibniz est un exemple de série alternée:
Pi = 4 * {1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 + ...}
qui, déjà mentionnée en Inde vers 1400, n'apparait en Occident qu'au 17e siècle.
Cet article fait partie de la série
Approximations de Pi.
Voir aussi Wiki:
Formule de Leibniz.
Nous verrons qu'avec cette formule, le résultat ne converge que très lentement vers Pi.
En effet, il faudra faire la somme d'un million de termes pour obtenir Pi avec une précision de 6 ou 7 chiffres !
Voici d'abord deux codes "équivalents", dont le second évite de calculer explicitement (2*i + 1):
double Leibniz_A(int n) {
double pi=1.0;
for (int i=1; i<=n; ++i) pi += ((i&1) ? -1.0 : 1.0) / (2*i + 1);
return 4*pi;
} // pi = 4 * {1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...}
double Leibniz_B(int n) {
double pi=1.0;
for (int i=3, N=2*n+1; i<=N; i+=2) pi += ((i&2) ? -1.0 : 1.0) / i;
return 4*pi;
} // pi = 4 * {1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...}
Dans la formule, réunissons maintenant chaque terme positif avec le terme consécutif négatif, ce qui "diminue" le nombre de termes et les rend tous positifs.
Pi = 8 * {1/(1*3) + 1/(5*7) + 1/(9*11) + 1/(13*15) + ...}
double Leibniz_C(int n) {
double pi=0.0;
for (int i=0; i<n; ++i) pi += 1.0 / (4*i + 1) / (4*i + 3);
return 8*pi;
} // pi = 8*{1/(1*3)+1(5*7)+1/(9*11)+1/(13*15)+...}
En écrivant Pi = 8 * {1/3 + 1/35 + 1/99 + 1/195 + ...}, nous remarquons qu'à chaque pas, le dénominateur
d augmente de 32 de plus:
double Leibniz_D(int n) {
double pi=0.0, d=3;
for (int i=0, N=32*n; i<N; i+=32) pi += 1.0 / (d += i);
return 8*pi;
}// pi = 8 * {1/3 + 1/35 + 1/99 + 1/195 + ...}
A partir de 3,
d est augmenté de 32, de 64, de 96, ...: donc Pi/8 = Somme(i>=0) 1/(3 + 32*i).
Le
Zip contient le seul fichier source
Leibniz.cpp dont voici l'
Output:
Leibniz_A: pi = 4*{1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...}
n= 10: pi=3.23231580940559
n= 100: pi=3.15149340107099
n= 1000: pi=3.14259165433954
n= 10000: pi=3.14169264359053
n= 100000: pi=3.14160265348972
n=1000000: pi=3.14159365358877
precis: pi=3.14159265358979
Leibniz_B: pi = 4*{1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...}
n= 10: pi=3.23231580940559
n= 100: pi=3.15149340107099
n= 1000: pi=3.14259165433954
n= 10000: pi=3.14169264359053
n= 100000: pi=3.14160265348972
n=1000000: pi=3.14159365358877
precis: pi=3.14159265358979
Leibniz_C: pi = 8*{1/(1*3)+1(5*7)+1/(9*11)+1/(13*15)+...}
n= 10: pi=3.09162380666784
n= 100: pi=3.13659268483881
n= 1000: pi=3.14109265362104
n= 10000: pi=3.14154265358982
n= 100000: pi=3.14158765358982
n=1000000: pi=3.14159215358990
precis: pi=3.14159265358979
Leibniz_D: pi = pi = 8 * {1/3 + 1/35 + 1/99 + 1/195 + ...}
n= 10: pi=3.09162380666784
n= 100: pi=3.13659268483881
n= 1000: pi=3.14109265362104
n= 10000: pi=3.14154265358982
n= 100000: pi=3.14158765358982
n=1000000: pi=3.14159215358990
precis: pi=3.14159265358979
Malgré notre effort de mieux adapter la formule, les performances restent très médiocres !
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.