Tous les langages (ou presque) disposent d'un générateur pseudo-aléatoire. Les syntaxes varient : ran, grand, rand, Random ... Ce sont des fonctions, qui au dire des manuels d'utilisation, "retournent des nombres au hasard". Ce que l'on entend par "nombres au hasard" dépend d'abord du type des nombres (booléens, entiers, réels). Nous conviendrons de noter Random la fonction qui "retourne un réel au hasard dans ". Ceci recouvre en fait deux propriétés distinctes, que nous admettrons comme postulats.
Postulats.
Interprétation.
Dans le langage courant "au hasard" ne signifie pas seulement aléatoire mais aussi uniformément réparti. Choisir au hasard, c'est donner les mêmes chances à tous les résultats possibles (équiprobabilité). On attend d'un réel "au hasard" dans qu'il tombe entre et avec probabilité , de même qu'entre et . Deux intervalles inclus dans ont la même probabilité d'être atteints s'ils ont même longueur, et cette probabilité est la longueur des intervalles. Les postulats ci-dessus ont une autre conséquence. Si on considère des couples successifs d'appels de Random comme des coordonnées de points du plan, ces points sont des "points au hasard" dans . Le sens précis étant que ces points sont indépendants et :
La probabilité qu'un point dont les deux coordonnées sont des appels de Random tombe dans un rectangle est la surface de ce rectangle. Ceci peut évidemment être étendu en dimension quelconque. Des triplets d'appels de Random successifs sont les coordonnées de "points au hasard" dans le cube en dimension 3, etc...
La probabilité pour Random de tomber sur n'importe quelle valeur particulière est nulle :
Il y a un paradoxe à admettre à la fois que Random peut prendre une infinité de valeurs distinctes et que la probabilité de tomber sur une valeur particulière est nulle. Nous verrons en pratique la situation est légèrement différente, sans que cela remette en cause les postulats de définition de Random.
Une fois admis les deux postulats, toute analyse d'algorithmes contenant Random est une démonstration mathématique qui ne doit contenir aucun à-peu-près.
Exemple 1 : (Int désigne la partie entière).
Remarque : Contrairement aux apparences, l'algorithme ci-dessus ne retourne pas de valeurs entre et . En théorie, la probabilité que Random retourne la valeur 1 est nulle. En pratique, les générateurs sont le plus souvent codés de manière à ne retourner ni 0 ni 1.
Exemple 2 : Lancer de dé.
Il ne faut pas déduire de cet exemple que Int Random est la bonne manière de tirer un entier au hasard entre 0 et . Les générateurs courants permettent différents types de sorties : réelles uniformes sur l'intervalle , mais aussi booléennes, entières, et même complexes.
Les générateurs permettent de simuler des suites d'expériences aléatoires indépendantes, et donc de calculer de façon approchée des probabilités par application de la loi des grands nombres.
Répéter fois
expérience
Si réalisé alors
finSi
finRépéter
La variable est la fréquence expérimentale de l'évènement au cours des expériences.
Exemple :
Répéter fois
Random
(* Lancer d'un dé *)
Si alors
finSi
finRépéter
En sortie de cet algorithme, contient un nombre d'autant plus proche de que est grand. Plus le nombre d'expériences est grand, plus précis est le résultat.