Bereich festlegen, Anzahl wählen und ziehen. Schalten Sie „ohne Wiederholung“ ein für eine Verlosung, bei der dieselbe Zahl nicht zweimal fallen darf.
Warum fast jeder Generator leicht unfair ist
Der übliche Weg, eine Zufallszahl in einen Bereich zu pressen, ist der Rest der Division: Man nehme ein Byte von 0 bis 255, teile durch 6, behalte den Rest, und fertig ist der Würfel. Das funktioniert, und ganz fair ist es nicht. Es gibt 256 mögliche Bytes und 6 Seiten, und 256 lässt sich nicht durch 6 teilen: Es geht 42-mal auf, 4 bleiben übrig. Diese vier Übrigen landen auf den Seiten 1 bis 4, also würfelt so ein Würfel 1, 2, 3 und 4 bei 43 von 256 Bytes und 5 und 6 nur bei 42. Das sind rund 2,4% zu oft für die niedrigen Seiten: bei zwanzig Würfen unsichtbar, bei zwanzigtausend vollkommen systematisch.
Die Lösung besteht darin, die Übrigen wegzuwerfen. Dieser Generator holt sich vom Browser eine 32-Bit-Zahl, und fällt sie in den oberen Rest, der nicht glatt aufgeht, wird sie verworfen und neu gezogen. Was bleibt, teilt exakt, also ist jeder Wert Ihres Bereichs gleich wahrscheinlich. Nicht beinahe, sondern exakt. Der Preis ist, dass eine Ziehung gelegentlich zwei Versuche statt einem braucht, was niemand bemerkt und was die gesamten Kosten der Fairness sind.
Die Zahlen stammen aus crypto.getRandomValues, der kryptografischen Quelle des Browsers, und nicht aus Math.random. Math.random ist schnell und taugt zum Mischen einer Hintergrundanimation, aber es ist ein vorhersagbarer Algorithmus: Mit genug Ausgaben lässt sich die nächste berechnen. Für die Frage, wer abspült, ist das belanglos. Für die Ziehung eines Preises ist es der Unterschied zwischen einer Verlosung und einer Formalität.
Was diese Seite nicht behauptet: dass die Ziehung nachprüfbar wäre. Ist sie nicht, und kein Browser-Generator ist es: Das Ergebnis entsteht auf Ihrem eigenen Rechner und beweist niemandem etwas, der nicht auf Ihren Bildschirm geschaut hat. Für ein Klassenzimmer, ein Spiel oder eine Entscheidung unter Freunden genügt das vollkommen. Für eine Ziehung mit Geld oder rechtlicher Bindung braucht es ein Verfahren mit Zeugen, keine Webseite.