Aller au contenu

Guide technique

Comment fonctionne la génération de nombres aléatoires

"Aléatoire" n'est pas un mot magique : un ordinateur ne lance pas de dé, il exécute un algorithme. La qualité de cet algorithme détermine si les nombres obtenus sont vraiment équitables ou légèrement biaisés. Ce guide explique, sans jargon inutile, comment le générateur de nombre aléatoire de ce site fonctionne réellement, et pourquoi ce choix compte.

Math.random() : rapide, mais pas conçu pour l'équité stricte

La quasi-totalité des générateurs de nombres aléatoires gratuits en ligne utilisent la fonction Math.random(), intégrée à tous les navigateurs. Elle est rapide et suffisante pour une animation, un jeu occasionnel ou un effet visuel. Le problème apparaît quand on la combine à la formule la plus répandue pour restreindre le résultat à un intervalle personnalisé : min + Math.floor(Math.random() * (max - min + 1)). Cette formule introduit un biais de modulo : selon la taille exacte de l'intervalle demandé, certaines valeurs ont une probabilité légèrement plus élevée d'apparaître que d'autres. Le biais est souvent minime, invisible sur quelques tirages, mais mesurable statistiquement sur un grand nombre de tirages, et il grandit avec certaines tailles d'intervalle.

L'API Web Crypto : un générateur cryptographiquement sécurisé

Ce site utilise à la place crypto.getRandomValues(), une fonction standard du navigateur documentée par le MDN (Mozilla Developer Network), conçue à l'origine pour des usages cryptographiques (génération de clés, jetons de sécurité) où le moindre biais serait inacceptable. Sur la plupart des systèmes, cette API s'appuie sur le générateur aléatoire sécurisé fourni par le système d'exploitation lui-même, une source de bien meilleure qualité statistique que l'algorithme interne rapide utilisé par Math.random() (généralement un xorshift128+ ou équivalent, optimisé pour la vitesse plutôt que pour l'imprévisibilité).

L'échantillonnage par rejet : éliminer le biais complètement

Utiliser une meilleure source de hasard ne suffit pas à elle seule : il faut aussi éviter d'introduire un biais lors de la conversion vers votre intervalle personnalisé. Ce générateur utilise une technique appelée échantillonnage par rejet (rejection sampling) : il calcule le plus grand multiple de la taille de votre intervalle qui tient dans l'espace de sortie du générateur, puis rejette et retire silencieusement toute valeur tirée au-dessus de ce seuil, en tirant une nouvelle valeur à la place. Le résultat final est mathématiquement garanti uniforme sur exactement l'intervalle demandé, sans aucune valeur favorisée, quelle que soit la taille de cet intervalle.

Et le générateur décimal ?

Pour un tirage avec décimales (1 à 6 chiffres après la virgule), le principe reste identique : l'intervalle est d'abord mis à l'échelle selon la précision demandée (par exemple, un intervalle 0 à 1 avec 2 décimales devient un intervalle entier 0 à 100 en interne), un entier sans biais est tiré dans cet espace mis à l'échelle via le même échantillonnage par rejet, puis le résultat est ramené à l'échelle d'origine en divisant. Les chiffres après la virgule sont donc exactement aussi uniformément répartis qu'un tirage entier classique, sans étape supplémentaire susceptible d'introduire un biais.

Pourquoi ce détail technique compte pour un usage ordinaire

Pour un usage occasionnel (choisir un gagnant, lancer un dé virtuel une fois), le biais de Math.random() passe totalement inaperçu : la différence pratique est nulle. Il devient pertinent dès qu'un tirage est répété à grande échelle, par exemple pour un échantillon statistique de plusieurs centaines de valeurs, un test logiciel automatisé, ou toute situation où la répétition finit par révéler des écarts qu'un tirage isolé ne montre jamais. Autant partir sur une base sans biais dès le départ, sans avoir à se demander ensuite si l'outil utilisé y était pour quelque chose. Aucune de ces valeurs n'est envoyée à un serveur, voir la politique de confidentialité.

Ce que ce générateur n'est PAS : une comparaison honnête

Un service comme RANDOM.ORG va plus loin encore : il capte du bruit atmosphérique radio réel comme source d'entropie physique, une méthode différente de tout ce qu'un navigateur peut faire seul. Ce générateur ne prétend pas être équivalent à cette source d'entropie matérielle véritable. Ce qu'il apporte, de façon vérifiable, c'est une amélioration nette et mesurable par rapport à l'immense majorité des générateurs gratuits en ligne qui s'appuient silencieusement sur Math.random() : une source cryptographiquement sécurisée, combinée à un échantillonnage sans biais, entièrement gratuite, illimitée et sans temps d'attente réseau.

Vérifier cela vous-même, sans compétence technique particulière

Deux façons simples de vérifier ce qui précède sans avoir à lire une seule ligne de code : d'abord, ouvrez la console de développement de votre navigateur (touche F12 sur la plupart des navigateurs de bureau) et tapez crypto.getRandomValues(new Uint32Array(1)) : vous obtenez directement la preuve que cette API standard, documentée publiquement, existe et fonctionne dans votre propre navigateur. Ensuite, répétez un tirage sur un petit intervalle (par exemple 1 à 6) plusieurs dizaines de fois sur la page du générateur, ou via les plages prédéfinies de la page générer un nombre aléatoire et notez la fréquence de chaque valeur obtenue : sur un échantillon suffisant, chaque valeur devrait apparaître à peu près aussi souvent que les autres, le comportement attendu d'une distribution réellement uniforme.

Type de nombre

Généré avec l'API Web Crypto (cryptographiquement sécurisée, sans biais) directement dans votre navigateur : rien de ce que vous saisissez n'est jamais envoyé à un serveur.

Cet outil vous a-t-il été utile ?
Donner un avis

Questions fréquentes

Le biais de Math.random() est-il vraiment perceptible ?
Sur un tirage isolé, non : le biais est trop faible pour être remarqué. Il devient statistiquement mesurable sur un grand nombre de tirages, particulièrement pour certaines tailles d'intervalle où le biais de modulo est le plus marqué. Pour un usage ponctuel, l'effet pratique est minime ; pour un usage répété à grande échelle (échantillonnage statistique, par exemple), utiliser une méthode sans biais devient plus important.
Qu'est-ce que le rejection sampling en une phrase ?
Une technique qui consiste à tirer une valeur brute, et à la rejeter (en tirant une nouvelle à la place) si elle tombe dans une zone qui casserait l'équilibre statistique de l'intervalle final demandé.
Le générateur est-il plus lent à cause de cette méthode plus rigoureuse ?
Non, la différence est imperceptible pour un usage normal : même avec l'échantillonnage par rejet, l'API Web Crypto du navigateur reste largement assez rapide pour générer jusqu'à 1 000 nombres en une fraction de seconde.
Pourquoi ne pas simplement utiliser RANDOM.ORG directement ?
RANDOM.ORG est un service excellent, mais son offre gratuite impose des limites de requêtes quotidiennes et nécessite un aller-retour réseau à chaque tirage. Ce générateur fonctionne entièrement dans votre navigateur, sans limite d'usage et sans délai réseau, avec une qualité largement suffisante pour l'immense majorité des usages non scientifiques.

Essayez le générateur vous-même

Le même moteur cryptographiquement sécurisé, prêt à générer votre prochain nombre.

Aller au générateur

Gratuit. Sans inscription.