10
for(int j=0;j<2;j++)
{
    for(int i=0;i<3276800;i++)
    {
        cout<<(rand()%2)<<'\n';
    }
    cout<<endl;
}

第一个 3276800 和第二个 3276800 是一样的。rand()的个数不一样,但是odevity是一样的;为什么?

4

1 回答 1

14

大多数实现使用的 RNGrand是一个线性同余生成器。这些往往在低位有很差的周期;非常幼稚的实现可能在低位只有 2 个周期(即交替 0 和 1)。

更好的实现只返回随机值的高 16 位,丢弃质量差的低位。在这样的实现中,低位的周期最多为 2^16 = 65536。由于 65536 均分 3276800,因此您将看到周期模式。

于 2013-09-01T13:08:50.263 回答