我想在X中产生一次高质量的伪随机机会(即1中100,1中10000等),我现在从梅森捻线机中得到一个随机数并用它来做这个(这是Java):
public final boolean isOneIn(int chance)
{
int rand = (int) (mersenne.nextDouble() * chance);
return (rand == 0);
}
那就是我将我的梅森捻线机产生的范围[0,1]中的双倍缩放到整数范围0到X-1,然后检查结果是否为0.我这样做< em> lot (订购2 ^ 22次)并使用结果模拟生物模型中的突变率。它产生的结果很可能对这个过程的随机性存在缺陷。
我担心测试特殊情况 - 0 - 位于生成范围之一会偏向结果并产生稍微扭曲的模型。这是一个有效的问题吗? Mersenne twister是否适合这个角色?有没有更好的方法呢?
编辑根据Jerry的回答,我注意到获得双倍并将其缩放的方法会对某些值产生轻微的偏差,并且他链接到的答案中描述的方法更好。但是,我仍然有兴趣知道其余问题的答案。