Mersenne Twister(MT19937AR.C)未返回随机数



我尝试搜索有关如何使用 Mersenne Twister 的MT19937AR.C变体的示例似乎使用mtwist.h

我的代码下面:

int getRandomNum(void)
{
    int i;
    i = (int) genrand_int32();
    return i;
}
int main(int argc, char **argv)
{
    ...
    int m = getRandomNum();
    printf("m = %d", m);
    ...
    return 0;
}

只是一遍又一遍地吐出相同的整数。似乎是一个种子问题,但是我发现使用mt19937随机数的每个实现都只是调用genrand_int32()。我是错误地这样做吗?

Mersenne Twister并不神奇;它无法从可预测的输入中产生随机结果。如果需要随机序列,则必须通过以某种独特的值调用init_genrand()来播种发电机。否则,它将使用固定的默认种子(特别是:5489)。

一个简单的价值是当前时间:

init_genrand(time(NULL));

不过,在您的程序过程中不要多次调用它 - 否则,您将重新启动序列!

最新更新