Un modèle de programmation courant choisit des éléments aléatoires en utilisant le modulo : `choices[random_u64() % n]`. Cela semble intuitif mais introduit un biais statistique parce que la plage aléatoire rarement se divise uniformément par le nombre de choix.
Par exemple, choisir parmi 3 éléments en utilisant un nombre aléatoire dans [0, 9] donne 4 entrées au choix 1 (0, 3, 6, 9) mais seulement 3 entrées chacune aux choix 2 et 3. Le choix 1 apparaît 40 % du temps au lieu des 33,3 % attendus. Ce biais de modulo se produit chaque fois que la plage aléatoire n'est pas un multiple du nombre de choix.
La bonne approche utilise `random_between(l, h)` qui distribue correctement la probabilité, bien qu'elle soit plus complexe à implémenter. Une meilleure conception d'API fournirait des fonctions de niveau supérieur comme `random_choice()` qui acceptent des distributions de probabilité explicites, obligeant les développeurs à affronter directement les exigences de distribution plutôt que de s'appuyer sur des primitives de bas niveau défectueuses.
Source: Hacker News · Résumé par HeadlinesBriefing