Approximations de Pi: Méthode Monte-Carlo

Description

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

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.