Что такое быстрая замена по модулю для генерации случайных чисел? - PullRequest
2 голосов
/ 12 января 2011

В настоящее время я использую очень быстрый алгоритм XorShift:

inline uint r() {
  static uint y = 2463534242u; // seed
  y ^= (y<<13);
  y ^= (y>>17);
  y ^= (y<<5);
  return y;
}

Теперь я хочу сгенерировать целое число из интервала [0, n).Конечно, я могу сделать это:

r() % n

Но это медленно.Есть ли более быстрый путь?

PS Небольшие неравенства в вероятностях разных чисел в интервале допустимы.

1 Ответ

0 голосов
/ 12 января 2011

Эта ссылка объясняет, как сделать модуль с использованием побитовой маски:

http://www.rohitab.com/discuss/topic/29723-modulus-with-bitwise-masks/

...