一个具体的例子
我需要生成一个介于 0 和 2 之间的随机数,包括 0 和 2。(或在 -1、0 和 1 之间随机选择)。
天真的方法是执行类似rand() mod 3
whererand()
返回整数的操作。这种方法不会生成统计上的随机数,除非 的上界rand()
不是互质的(下界为 0)。
例如,假设 rand() 返回 2 位(从 0 到 3,包括),模数将映射:
0 -> 0
1 -> 1
2 -> 2
3 -> 0
如果返回更多位,则这种向 0 的偏斜显然会小得多,但无论如何,偏斜将保持不变。
一般问题
有没有办法在 0 和 n-1 之间生成一个均匀分布的随机数,其中 n 与 2 互质?