Sep 26, 2020 13:17
let word64 = fromIntegral randomWord32
randomModulo = shiftR (modulo * word64) 32
Работает лучше, чем обычное взятие по модулю с генераторами типа созданных Марсальи (два умножения, результаты которых перемешиваются сложением и сдвигом). Как я понимаю, потому, что старшие биты лучше меняются, а при взятии по модулю они не всегда бывают задействованы в нужной мере (modulo = 2N, например, или близкие к ним).
статистика