Mersenne Twister (mt19937ar.c) 不返回随机数
Mersenne Twister (mt19937ar.c) not returning random number
我尝试搜索有关如何使用 mt19937ar.c variant of Mersenne Twister but most come up in C++ and 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()
。我做错了吗?
梅森龙卷风并不神奇。它无法从可预测的输入中产生随机结果。如果你想要一个随机序列,你必须通过使用某种唯一值调用 init_genrand()
来为生成器播种。否则它将使用固定的默认种子(特别是:5489)。
当前时间是一个易于使用的值:
init_genrand(time(NULL));
不过,在您的程序中不要多次调用它——否则,您将重新启动序列!
我尝试搜索有关如何使用 mt19937ar.c variant of Mersenne Twister but most come up in C++ and 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()
。我做错了吗?
梅森龙卷风并不神奇。它无法从可预测的输入中产生随机结果。如果你想要一个随机序列,你必须通过使用某种唯一值调用 init_genrand()
来为生成器播种。否则它将使用固定的默认种子(特别是:5489)。
当前时间是一个易于使用的值:
init_genrand(time(NULL));
不过,在您的程序中不要多次调用它——否则,您将重新启动序列!