Mersenne Twister(mt19937ar.c)没有返回随机数

时间:2016-11-22 01:54:34

标签: c random random-seed mersenne-twister

我尝试搜索有关如何使用 Mersenne Twister mt19937ar.c变体的示例,但大多数都出现在 C ++ others seem to use 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()。我做错了吗?

1 个答案:

答案 0 :(得分:1)

Mersenne Twister并不神奇;它无法从可预测的输入中产生随机结果。如果您想要一个随机序列,您必须通过使用某种唯一值调用init_genrand()来为生成器播种。否则,它将使用固定的默认种子(具体为:5489)。

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

init_genrand(time(NULL));

在你的节目中不要多次打电话给你,否则,你将重新启动序列!