Fonctionnement du tirage
Pas de simples promesses : voici la méthode en détail.
Le gagnant est choisi avant que la roue ne tourne
À chaque lancer, le gagnant est désigné avant même que l'animation ne soit lancée et ciblée sur lui. Cet ordre d'exécution garantit que la force de votre geste ne peut en aucun cas modifier le résultat, et que l'activation du mode sans animation exécute le même tirage sans animation plutôt qu'un code différent. Cela signifie également que l'animation que vous regardez n'est que la reconstitution visuelle d'un choix déjà arrêté — la seule manière de tenir nos deux engagements.
D'où provient le hasard
La source provient du générateur cryptographique de votre navigateur, crypto.getRandomValues, et non de Math.random. Math.random peut être prévisible, et l'est effectivement sur certains moteurs ; pour un tirage au sort, cela fait toute la différence.
Pourquoi nous éliminons certains nombres
Convertir un nombre aléatoire de 32 bits en « un nombre de 0 à 11 » à l'aide d'un modulo introduit un biais subtil. 2³² n'étant pas divisible par 12, les premières options bénéficient chacune d'une chance supplémentaire. Sur une roue à douze secteurs, ce biais est minime, mais bien réel, favorise toujours les mêmes secteurs et ne s'équilibre jamais. Ainsi, plutôt que d'utiliser le modulo, nous rejetons tout tirage tombant dans cet excédent inégal pour en demander un nouveau. Cela nécessite parfois un tirage supplémentaire mais garantit un résultat parfaitement uniforme.
const limit = Math.floor(2 ** 32 / max) * max;
let draw = crypto.getRandomValues(new Uint32Array(1))[0];
while (draw >= limit) {
draw = crypto.getRandomValues(new Uint32Array(1))[0];
}
return draw % max;Les poids, et pourquoi la taille des secteurs leur correspond
Un tirage pondéré calcule la somme des poids, sélectionne un nombre uniforme inférieur à ce total via la même méthode de rejet, puis détermine l'entrée correspondante. La roue dessine ensuite chaque secteur exactement selon sa part du cercle. Une roue dont les secteurs sembleraient égaux alors que les probabilités ne le sont pas serait trompeuse : surface et probabilités sont donc strictement identiques par conception, et non par simple approximation.
Votre liste ne quitte jamais votre navigateur
Il n'y a aucun compte utilisateur ni aucun stockage sur serveur. Votre liste reste dans ce navigateur, et un lien de partage contient les données de la roue directement dans l'URL. Rien de ce qui touche à un tirage n'est enregistré où que ce soit de notre côté.
Vérifiez par vous-même
L'algorithme de tirage ne fait que quelques dizaines de lignes et chaque affirmation ci-dessus est couverte par un test automatisé qui échouerait si elle cessait d'être vraie — y compris un test qui injecte des nombres conçus pour provoquer un biais de modulo et s'assure que le résultat reste uniforme.
Une roue peut contenir jusqu'à 1000 entrées, et la méthode ci-dessus reste strictement la même pour une seule entrée comme pour 1000.