c - Mersenne Twister (mt19937ar.c) 不返回随机数

标签 c random random-seed mersenne-twister

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

最佳答案

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

一个易于使用的值是当前时间:

init_genrand(time(NULL));

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

关于c - Mersenne Twister (mt19937ar.c) 不返回随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40732581/

相关文章:

c - Frama-c,非确定性浮点值

悬停时的 jQuery 动画摇动

我们只能重新编译内核源代码树中的内核模块吗?

c - 将变量从终端传递到 makefile

子文件夹中的 Python 随机行

java - 有没有办法从数字序列中生成种子?

matlab - 如何通过播种随机抽样数据?

c - 如何动态分配内存给我的文件流?

javascript - TypeError : Cannot mix BigInt and other types, 使用显式转换