Le principe des simulations de Monte Carlo est de générer un ensemble de réalisations pseudo-aléatoires d'une variable aléatoire ou d'un champ aléatoire. Pour obtenir une réalisation x de la variable X de fonction de répartition PX(), on simule un nombre z uniformément réparti sur [0,1], puis on applique la relation
Bon nombre d'algorithmes de simulation d'un nombre uniformément réparti sur [0,1] sont basés sur la congruence linéaire
dans laquelle il est nécessaire de définir une valeur initiale z0 de Z. La qualité de la génération est liée à la période de retour des mêmes réalisations de Z, ainsi qu'à la dispersion des réalisations. Le choix de a, b et m conditionnent cette qualité. On peut noter quelques choix reconnus efficaces :
{a,b,m}={1664525, 1013904223, 232} proposé par Knuth & Lewis,
{a,b,m}={69069,0,232} proposé par Marsaglia,
{a,b,m}={3116728,1,248} proposé par Lavaux & Jenssens.
D'autres algorithmes basés sur la suite de Fibonacci ou sur les nombres de Mersenne ont été proposés. On peut noter l'algorithme "Mersenne Twister" de Matsumoto & Nishimura, particulièrement efficace avec une période de 219937-1 itérations (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html).