Approximations de Pi: Méthode Monte-Carlo
Bonjour,
Cette méthode est proche de l'expérience de l'aiguille de Buffon, également basée sur les procédés aléatoires.
Dans un carré de RAND_MAX*RAND_MAX, on compte tous les "points aléatoires" obtenus qui se trouvent dans le cercle de rayon RAND_MAX et centré à l'origine; c'est-à-dire ceux qui se trouvent à une distance (du centre) inférieur au rayon.
En utilisant le théorème de Pythagore, on évite de calculer explicitement cette distance avec une racine carrée.
Cet article fait partie de la série
CodeS-SourceS: Approximations de Pi <<< cliquez !.
Avec 1000000 de points (ici, on ne peut pas bien parler d'itérations), on obtient pi avec 1 à 2 chiffres précis après la virgule
const uint64_t RR = RAND_MAX*RAND_MAX;
double MonteCarlo(int n) {
int k=0;
for (int i=0; i<n; ++i) {
uint64_t x=rand(), y=rand();
if (x*x + y*y <= RR) k++;
}
return 4.0*k/n;
}
Le
Zip contient le seul fichier source
MonteCarlo.cpp dont voici l'
Output:
RAND_MAX = 32767
MonteCarlo:
n= 10: pi=3.60000000000000
n= 100: pi=3.08000000000000
n= 1000: pi=3.08400000000000
n= 10000: pi=3.11320000000000
n= 100000: pi=3.13968000000000
n= 1000000: pi=3.13992400000000
n= 10000000: pi=3.14097520000000
n=100000000: pi=3.14138508000000
précis: pi=3.14159265358979
MonteCarlo: srand(478)
n= 10: pi=3.20000000000000
n= 100: pi=3.08000000000000
n= 1000: pi=3.16000000000000
n= 10000: pi=3.16120000000000
n= 100000: pi=3.14732000000000
n= 1000000: pi=3.14112800000000
n= 10000000: pi=3.14182280000000
n=100000000: pi=3.14159260000000
précis: pi=3.14159265358979
On constate que certaines initialisations de la fonction aléatoire donne des résultats un peu meilleurs.
Bonne lecture.
Wiki:
Méthode de Monte-Carlo
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.