Générateur de nombres aléatoires
Résultat
Numéros tirés
- Valeurs possibles
- 100
- Probabilité d’au moins un numéro répété
- 9,65 %
Un générateur de nombres aléatoires transforme un point de départ en une liste de nombres entiers compris dans un intervalle que vous fixez. Celui-ci prend un intervalle, la quantité de nombres voulue et la graine aléatoire de départ, et rend exactement ce nombre d’entiers — les mêmes à chaque fois que vous réutilisez la même graine, ce qui donne une liste que vous pouvez confier à quelqu’un d’autre pour qu’il la reproduise. Désactivez les doublons et le résultat devient une sélection plutôt qu’une suite, donc aucune valeur ne peut sortir deux fois ; laissez-les activés et les nombres sont des tirages indépendants, ce qui est le modèle honnête pour un dé, une machine de loterie ou une liste de lecture mélangée qui peut se répéter. Le panneau indique aussi combien de valeurs différentes l’intervalle contient et quelle serait la probabilité de répétition si les doublons étaient permis.
Formule
suivant = (état + 0x6D2B79F5) mélangé par multiplications et décalages → valeur = Minimum + ⌊suivant × (Maximum − Minimum + 1)⌋
- graine aléatoire
- L’état de départ du générateur, un nombre entier quelconque de 0 à 4 294 967 295. Ce n’est pas une source de hasard en soi — c’est le point où la suite commence, et c’est précisément pourquoi la même graine donne toujours la même liste
- état
- L’état courant, mis à jour une fois par nombre. La mise à jour mélange l’état avec une constante fixe et quelques multiplications et décalages ; c’est ce mélange qui rend des valeurs consécutives sans lien apparent, et c’est l’étape qui casserait en premier si on la simplifiait
- Minimum, Maximum
- Les bornes de l’intervalle, toutes deux incluses. C’est par la largeur de l’intervalle que la fraction est mise à l’échelle, donc chaque nombre entier de l’intervalle a la même probabilité
- ⌊ ⌋
- L’arrondi vers le bas. Le générateur produit une fraction dans [0, 1) et la partie entière la transforme en l’un des nombres entiers de l’intervalle
- nombre
- Combien de nombres produire, jusqu’à 200. Avec les doublons désactivés, ce nombre ne peut pas dépasser la largeur de l’intervalle, car une sélection ne peut pas être plus longue que le vivier dont elle provient
Utilisez-le quand il vous faut une liste plutôt qu’un seul nombre : un échantillon à vérifier à la main, un jeu de cas de test qui doit être identique à chaque exécution, un tirage que vous voulez pouvoir rejouer devant un public, ou des données de remplissage. La possibilité de fixer la graine est la raison de préférer cette page à la fonction aléatoire fournie avec votre langage : une graine transforme un résultat unique en quelque chose que vous pouvez partager, revérifier et discuter. Prenez-la avec les doublons désactivés quand une même valeur ne doit pas apparaître deux fois, ce qui est la forme d’un tirage de loterie, d’un échantillon d’une liste et d’un ordre mélangé. Deux choses qu’elle n’est pas : ce n’est pas une source de nombres imprévisibles, donc rien qui doive être indevinable n’a sa place ici ; et ce n’est pas un substitut à un échantillon aléatoire statistique d’une population réelle, parce qu’elle ne connaît rien de la population, seulement de l’intervalle.
Exemples détaillés
Cinq nombres de 1 à 100, et les cinq mêmes une seconde fois
- L’intervalle de 1 à 100 contient 100 valeurs différentes, donc chaque tirage vaut l’une de ces 100
- La graine 1 fixe l’état de départ ; chacun des cinq nombres le met à jour une fois
- En arrondissant chaque fraction vers le bas dans 1 à 100, on obtient 63, 1, 53, 99 et 97 dans cet ordre
Ces cinq nombres ne sont ni une coïncidence ni un tableau enregistré : ce sont ceux que produit la graine 1, et saisir de nouveau 1 dans le champ de la graine les reproduit à l’identique. Remarquez que 9,65 % est une affirmation sur l’intervalle et sur le nombre de tirages, pas sur ce tirage précis — avec cinq tirages sur cent valeurs, il y a un peu moins d’une chance sur dix que deux d’entre eux coïncident, que deux valeurs de cette liste se rencontrent ou non. Passer la graine à 7 donne une liste entièrement différente sans toucher à ce pourcentage, et c’est la façon la plus nette de voir quelle part du panneau est aléatoire et quelle part est de l’arithmétique.
Six nombres de 1 à 49 avec les répétitions interdites
- Le vivier compte 49 valeurs et six sont tirées sans remise
- Chaque nouveau nombre est retiré jusqu’à tomber sur une valeur que le vivier n’a pas déjà donnée, et c’est pourquoi une valeur ne peut jamais apparaître deux fois
- En lisant la liste dans l’ordre de production, on obtient 23, 16, 33, 31, 8 et 11
Désactiver les doublons ne change pas les 27,26 %, et c’est justement pourquoi ce nombre est affiché à côté de cet exemple : c’est la probabilité que six tirages sur 49 se soient télescopés si les répétitions avaient été permises, et elle est la même que vous les ayez interdites ou non. C’est aussi ce qui rend un tirage sans répétition coûteux aux grands effectifs — avec 49 valeurs et 6 tirages, plus d’un quart des tirages sans contrainte répéteraient quelque chose, et à 23 tirages sur 365 la valeur dépasse la moitié. Les nombres restent dans l’ordre où ils ont été tirés plutôt que d’être triés, afin que la même graine et les mêmes réglages reproduisent toujours la même liste.
Un intervalle qui ne contient qu’une seule valeur
- L’intervalle ne contient exactement qu’une valeur, donc chaque tirage vaut cette valeur
- La probabilité de répétition est celle que quatre tirages se télescopent, et avec un vivier d’une seule valeur ils le doivent
- Le résultat est 7, 7, 7 et 7
C’est le cas limite où le générateur de nombres aléatoires cesse d’être aléatoire et devient une constante, et il vaut la peine de le garder en tête parce que c’est le seul où la sortie est entièrement prévisible avant même d’appuyer sur quoi que ce soit. Il marque aussi la frontière du mode sans répétition : avec le même intervalle, demander deux nombres sans doublons est une requête impossible plutôt qu’une liste courte, et la page le dit au lieu de renvoyer silencieusement un seul nombre.
Limites
Ces nombres ne conviennent à rien qui doive être indevinable. Le générateur est une petite suite arithmétique rapide et à graine, du genre de celles qui sont intégrées aux logiciels courants : connaissant la graine, n’importe qui peut reproduire la liste entière, et à partir de quelques-unes de ses valeurs le reste peut être reconstitué. Cela l’exclut pour les mots de passe, les clés, les jetons, les codes à usage unique, les loteries où de l’argent est en jeu et tout le reste où un participant ne doit pas pouvoir prédire ou reconstituer le tirage. Pour ces cas, une source aléatoire cryptographique est la seule réponse correcte. La probabilité de répétition n’est pas non plus une affirmation sur la liste que vous avez sous les yeux : c’est la probabilité qu’un tirage de cette taille dans ce vivier contienne au moins une collision, calculée comme si les tirages étaient indépendants et uniformes, et elle est affichée que les doublons aient été autorisés ou non. Son sens pratique est celui qui prend les gens en défaut — une collision ne devient probable qu’à partir d’environ la racine carrée de la taille du vivier, si bien que 23 tirages sur 365 dates dépassent déjà une chance sur deux. Enfin, le nombre est plafonné à 200 par exécution, et les répétitions deviennent impossibles dès que ce nombre dépasse la taille du vivier.
Questions fréquentes
- Ces nombres sont-ils utilisables pour une loterie, un mot de passe ou un jeton de sécurité ?
- Non. Ce générateur est une petite suite arithmétique à graine du genre que les logiciels courants utilisent, et non un générateur cryptographique : à partir de la graine, toute la liste peut être reproduite, et à partir de quelques-unes de ses valeurs le reste peut être reconstitué. Tout usage où un participant ne doit pas pouvoir prédire ou reconstituer le résultat — loteries où de l’argent est en jeu, mots de passe, clés, jetons, codes à usage unique — exige une source aléatoire cryptographique. Pour les tirages, les échantillons, les jeux et les données de test, où la reproductibilité est une qualité et non une fuite, c’est le bon outil.
- À quoi sert la graine, et pourquoi les mêmes nombres reviennent-ils à chaque fois ?
- La graine est l’état depuis lequel la suite démarre, donc la même graine produit toujours la même liste. C’est délibéré : cela rend le résultat reproductible, ce qui est souhaitable quand vous devez confier un échantillon à quelqu’un, rejouer un tirage devant un public ou empêcher un cas de test de dériver. Changez la graine et vous obtenez une autre liste à partir des mêmes réglages. Si vous voulez que les nombres diffèrent à chaque fois, changez la graine entre deux exécutions — la valeur que vous saisissez est conservée avec le résultat, donc une liste qui vous a plu peut toujours être retrouvée.
- Pourquoi des doublons peuvent-ils encore apparaître alors qu’ils sont autorisés ?
- Parce que chaque tirage est indépendant. Avec les doublons autorisés, chaque position choisit une des valeurs de l’intervalle sans tenir compte de ce que les autres positions ont choisi, ce qui est le modèle honnête pour un lancer de dé ou une machine de loterie qui remet sa boule en jeu. La probabilité de répétition affichée sur le panneau est exactement la probabilité qu’au moins une paire se télescope — environ 9,65 % pour cinq tirages sur cent valeurs, et plus de 50 % dès que vous tirez 23 valeurs sur 365. Désactivez les doublons quand une même valeur ne doit pas apparaître deux fois, ce qui est la forme d’une tombola, d’un échantillon d’une liste ou d’un ordre mélangé.
- La probabilité de répétition diminue-t-elle si j’interdis les doublons ?
- Non, et le panneau continue volontairement d’afficher le même nombre. Il répond à la question que vous vous posez réellement en basculant ce réglage : quelle aurait été la probabilité d’une collision si les répétitions avaient été permises. Pour six nombres de 1 à 49, elle vaut 27,26 %, donc interdire les doublons écarte un risque réel et non théorique. Cela explique aussi pourquoi un tirage sans répétition ralentit puis devient impossible aux grands effectifs — dès que le nombre dépasse la quantité de valeurs de l’intervalle, il n’y a plus aucune réponse valide, et la page le signale au lieu de renvoyer une liste plus courte.
- Combien de nombres puis-je générer d’un coup, et sur quel intervalle ?
- Jusqu’à 200 nombres par exécution, et les bornes de l’intervalle doivent être des nombres entiers, le minimum n’étant pas supérieur au maximum. Les valeurs elles-mêmes peuvent être négatives, donc un intervalle de −50 à 50 convient. Des bornes non entières sont refusées plutôt qu’arrondies : avec les doublons interdits, tirer dans un intervalle qui contiendrait des fractions ferait de la règle sans répétition une condition vide, et une liste plausible qui ignore silencieusement son propre réglage est pire qu’un message d’erreur.
- Les nombres sont-ils triés ?
- Non — ils sont imprimés dans l’ordre où ils ont été tirés, et cet ordre fait partie du résultat. Trier jetterait une information que la même graine est censée reproduire, et cela compte pour tout ce où la position a un sens, comme attribuer un ordre mélangé ou distribuer une main. Si vous voulez une sélection ordonnée, triez la liste vous-même après l’avoir copiée ; le tirage lui-même reste fidèle à la suite qu’a produite la graine.
Références
- SP 800-90A Rev. 1, Recommendation for Random Number Generation Using Deterministic Random Bit Generators — National Institute of Standards and Technology (NIST), Computer Security Resource Center
- Math.random() — JavaScript reference (a built-in generator with no seed parameter, and the explicit warning that it is not cryptographically secure) — MDN Web Docs, Mozilla
- Birthday Problem — from Wolfram MathWorld (the probability that a group drawn from a pool contains a repeated value, 1 − the falling-factorial product over the pool size) — Wolfram MathWorld