let word64 = fromIntegral randomWord32
randomModulo = shiftR (modulo * word64) 32
Работает лучше, чем обычное взятие по модулю с генераторами типа созданных Марсальи (два умножения, результаты которых перемешиваются сложением и сдвигом). Как я понимаю, потому, что старшие биты лучше меняются, а при взятии по модулю они не всегда бывают
(
Read more... )