Bonjour,
Voici la formule de Newton:
Pi/6 = 1/1/2 + 1/2/(3*2^3) + (1*3)/(2*4)/(5*2^5) + (1*3*5)/(2*4*6)/(7*2^7) + ...
Elle converge assez rapidement puisqu'on obtient la précision double avec 22 itérations.
Cet article fait partie de la série
Approximations de Pi.
Donnons un premier code correspondant à cette formule:
double Newton_A(int n) {
double pi=0.5, num=1.0, den=1.0, exp=2.0;
for (int i=1; i<n; ++i) {
num *= 2*i-1;
den *= 2*i;
exp *= 4;
pi += num/den/((2*i+1)*exp);
}
return 6*pi;
} // Pi/6 = 1/2 + 1/2/(3*2^3) + 3/(2*4)/(5*2^5) + (3*5)/(2*4*6)/(7*2^7) + ...
Remplaçons
num/den/exp par la seule variable
fac et évitons les calculs de 2*i:
double Newton_B(int n) { // avec un seul facteur et sans calculs de 2*i
double pi=0.5, fac=0.5;
for (int i=2, N=2*n; i<N; i+=2) {
fac *= (double)(i-1)/i/4;
pi += fac/(i+1);
}
return 6*pi;
} // Pi/6 = 1/2 + 1/2/(3*2^3) + 3/(2*4)/(5*2^5) + (3*5)/(2*4*6)/(7*2^7) + ...
Ce qui donne en plus condensé:
double Newton_C(int n) { // en plus condensé
double pi=0.5, fac=0.5;
for (int i=2, N=2*n; i<N; i+=2) pi += (fac *= (double)(i-1)/i/4)/(i+1);
return 6*pi;
} // Pi/6 = 1/2 + 1/2/(3*2^3) + 3/(2*4)/(5*2^5) + (3*5)/(2*4*6)/(7*2^7) + ...
Le
Zip contient le seul fichier source
Newton.cpp qui donne l'
Output suivant:
pi = 6*{1/2 + 1/2/(3*2^3) + 3/(2*4)/(5*2^5) + (3*5)/(2*4*6)/(7*2^7) + ...}
Newton_A:
n= 2: pi=3.12500000000000
n= 4: pi=3.14115513392857
n= 6: pi=3.14157671577487
n= 8: pi=3.14159198235838
n= 10: pi=3.14159262287062
n= 12: pi=3.14159265210589
n= 14: pi=3.14159265351534
n= 16: pi=3.14159265358595
n= 18: pi=3.14159265358959
n= 20: pi=3.14159265358978
n= 22: pi=3.14159265358979
precis: pi=3.14159265358979
Newton_B:
n= 2: pi=3.12500000000000
n= 4: pi=3.14115513392857
n= 6: pi=3.14157671577487
n= 8: pi=3.14159198235838
n= 10: pi=3.14159262287062
n= 12: pi=3.14159265210589
n= 14: pi=3.14159265351534
n= 16: pi=3.14159265358595
n= 18: pi=3.14159265358959
n= 20: pi=3.14159265358978
n= 22: pi=3.14159265358979
precis: pi=3.14159265358979
Newton_C:
n= 2: pi=3.12500000000000
n= 4: pi=3.14115513392857
n= 6: pi=3.14157671577487
n= 8: pi=3.14159198235838
n= 10: pi=3.14159262287062
n= 12: pi=3.14159265210589
n= 14: pi=3.14159265351534
n= 16: pi=3.14159265358595
n= 18: pi=3.14159265358959
n= 20: pi=3.14159265358978
n= 22: pi=3.14159265358979
precis: pi=3.14159265358979
Voir aussi:
Constante Pi
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.