Un patrón común de programación selecciona elementos aleatorios usando módulo: `choices[random_u64() % n]`. Esto parece intuitivo pero introduce sesgo estadístico porque el rango aleatorio rara vez se divide uniformemente por el número de opciones.
Por ejemplo, al elegir entre 3 elementos usando un número aleatorio en [0, 9], se le dan 4 entradas a la opción 1 (0, 3, 6, 9) pero solo 3 entradas cada una a las opciones 2 y 3. La opción 1 aparece el 40% de las veces en lugar del esperado 33.3%. Este sesgo de módulo ocurre siempre que el rango aleatorio no sea múltiplo del número de opciones.
El enfoque correcto utiliza `random_between(l, h)`, que distribuye correctamente la probabilidad, aunque es más complejo de implementar. Un mejor diseño de API proporcionaría funciones de nivel superior como `random_choice()` que acepten distribuciones de probabilidad explícitas, obligando a los desarrolladores a enfrentar directamente los requisitos de distribución en lugar de depender de primitivas de bajo nivel defectuosas.
Fuente: Hacker News · Resumido por HeadlinesBriefing