HeadlinesBriefing HeadlinesBriefing.com

Warum die zufällige Auswahl mit Modulo Verzerrung erzeugt

Hacker News •
×

Ein häufiges Programmiermuster wählt zufällige Elemente mittels Modulo aus: `choices[random_u64() % n]`. Dies erscheint intuitiv, führt aber zu statistischer Verzerrung, weil der Zufallsbereich selten gleichmäßig durch die Anzahl der Optionen teilbar ist.

Zum Beispiel ergibt die Auswahl aus 3 Elementen mit einer Zufallszahl im Bereich [0, 9] für die Option 1 4 Eingaben (0, 3, 6, 9), während jede der Optionen 2 und 3 nur 3 Eingaben erhält. Damit wird die Option 1 in 40 % der Fälle ausgewählt statt der erwarteten 33,3 %. Dieser Modulo-Verzerrungseffekt tritt immer auf, wenn der Zufallsbereich kein Vielfaches der Optionenzahl ist.

Der richtige Ansatz verwendet `random_between(l, h)`, der die Wahrscheinlichkeit korrekt verteilt, obwohl seine Implementierung komplexer ist. Ein besseres API-Design würde Funktionen höherer Ebene wie `random_choice()` bereitstellen, die explizite Wahrscheinlichkeitsverteilungen akzeptieren und Entwickler zwingen, sich direkt mit den Verteilungsanforderungen auseinanderzusetzen, anstatt auf fehlerhafte Niedrigstufen-Primitiven zu verlassen.

Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing