Ce à quoi ce générateur convient, et ce à quoi il ne convient pas
Les générateurs pseudo-aléatoires diffèrent énormément par leurs usages appropriés. Celui-ci est rapide, reproductible et statistiquement correct pour l'usage courant, et il n'est absolument pas une source de secrets.
| Usage | Adapté ? | Pourquoi |
|---|---|---|
| Enseignement, simulations, échantillonnage | Oui | Des tirages reproductibles sont un avantage |
| Désigner un gagnant, dés, numéros de loterie | Oui, avec une graine neuve | Qui connaît la graine peut reproduire le tirage |
| Mots de passe, clés, jetons, identifiants de session | Non | L'état se retrouve à partir de la sortie ; utilisez le générateur de mots de passe |
| Jeu d'argent réglementé | Non | Ces cadres exigent du matériel certifié ou des générateurs cryptographiques |
- Les deux bornes de l'intervalle sont incluses : un intervalle de 1 à 100 contient donc 100 valeurs possibles.
- Sans remise, le nombre de tirages ne peut dépasser le nombre de valeurs de l'intervalle. Le calculateur refuse plutôt que de répéter en silence.
Ce qu'est un générateur pseudo-aléatoire
Un générateur de nombres pseudo-aléatoires est un algorithme déterministe qui produit une suite passant les tests statistiques d'aléa. Il n'est pas aléatoire au sens physique : c'est une récurrence fixe qui, à partir d'une valeur de départ donnée — la graine —, produit toujours la même suite.
Celui-ci est un générateur xorshift 32 bits, publié par George Marsaglia dans le Journal of Statistical Software en 2003. Il combine de façon répétée une valeur avec des copies décalées d'elle-même par ou exclusif, avec un triplet de décalages choisi pour que la suite parcoure tous les états 32 bits non nuls avant de se répéter.
L'usage d'une graine est délibéré et non une limite. Chaque calculateur de ce site est une fonction pure de ses entrées, et c'est ce qui rend les résultats reproductibles et vérifiables. Cela vous donne en outre ce qu'un générateur piloté par l'horloge ne peut offrir : citez la graine à côté de vos nombres et n'importe qui reproduira votre tirage à l'identique.
Comment utiliser le générateur
- Fixez la valeur minimale et la valeur maximale. Les deux bornes sont incluses dans l'intervalle.
- Choisissez combien de nombres tirer.
- Décidez si les répétitions sont autorisées. Sans remise, aucune valeur ne peut sortir deux fois : vous ne pouvez donc pas tirer plus de nombres que l'intervalle n'en contient.
- Changez la graine chaque fois que vous voulez un tirage différent. La même graine renvoie toujours les mêmes nombres.
Comment les nombres sont produits
La récurrence xorshift transforme trois fois un état 32 bits à chaque tirage, puis divise par 2^32 pour donner une valeur dans l'intervalle de zéro à un exclu. Multiplier par la taille de l'intervalle et prendre la partie entière ramène à un entier.
Le tirage sans remise utilise un mélange partiel de Fisher-Yates sur l'intervalle. Chaque tirage place un élément restant à sa position, ce qui sélectionne un sous-ensemble uniformément aléatoire en une seule passe et ne peut pas s'enliser comme le fait une approche tirer-et-recommencer à mesure que le vivier se vide.
Erreurs fréquentes
- Utiliser un générateur pseudo-aléatoire pour quoi que ce soit de secret. La suite est entièrement déterminée par la graine.
- Attendre de nouveaux nombres sans changer la graine. La reproductibilité est le but ; la graine est la commande.
- Supposer que la borne supérieure est exclue. Ici, les deux bornes sont incluses.
- Demander plus de valeurs distinctes que l'intervalle n'en contient.
- Prendre une série de valeurs voisines pour un défaut. Le regroupement est une propriété normale des suites aléatoires, et son absence serait plus suspecte que sa présence.
Questions fréquentes
Pourquoi la même graine donne-t-elle toujours les mêmes nombres ?
Parce qu'un générateur pseudo-aléatoire est une récurrence déterministe et que la graine est son état de départ. C'est une qualité et non un défaut : citer la graine permet à quiconque de reproduire votre tirage à l'identique, ce dont ont précisément besoin la recherche reproductible et les démonstrations en cours. Pour tirer autrement, changez la graine.
Est-ce assez aléatoire pour un tirage au sort ?
Pour un tirage informel oui, à condition de choisir une graine que les participants ne peuvent anticiper et de la publier ensuite pour que le résultat soit vérifiable. Pour un jeu d'argent réglementé non : ces cadres exigent des générateurs matériels certifiés ou des algorithmes cryptographiquement sûrs.
Puis-je m'en servir pour générer un mot de passe ?
Non. L'état interne d'un générateur xorshift se retrouve à partir d'une courte série de sa sortie : tout ce qui en dérive est donc prévisible. Utilisez le générateur de mots de passe de ce site, qui puise dans la source aléatoire cryptographiquement sûre du système d'exploitation.
Que signifie tirer sans remise ?
Cela signifie qu'aucune valeur ne peut sortir plus d'une fois, comme lorsqu'on tire des boules de loterie. Chaque tirage retirant une valeur du vivier, vous ne pouvez pas tirer plus de nombres que l'intervalle n'en contient : tirer six valeurs distinctes dans un intervalle de cinq est impossible.
Les nombres sont-ils uniformément répartis ?
Oui, à la précision du générateur sous-jacent. Chaque valeur de l'intervalle est également probable, et le mode sans remise utilise un mélange partiel de Fisher-Yates, qui sélectionne tout sous-ensemble d'une taille donnée avec la même probabilité.
Références
- Marsaglia G. Xorshift RNGs. Journal of Statistical Software 2003; 8(14): 1-6. doi:10.18637/jss.v008.i14.
- Knuth DE. The Art of Computer Programming, Volume 2: Seminumerical Algorithms, 3rd edition. Addison-Wesley, 1997 — random number generation and statistical testing.
- Fisher RA, Yates F. Statistical Tables for Biological, Agricultural and Medical Research. Oliver and Boyd, 1938 — the shuffle used for sampling without replacement.
- L'Ecuyer P, Simard R. TestU01: A C library for empirical testing of random number generators. ACM Transactions on Mathematical Software 2007; 33(4): 22.