需要帮助转换C Mersenne twister实现对我有用吗

需要帮助转换C Mersenne twister实现对我有用吗,c,random,implementation,mersenne-twister,C,Random,Implementation,Mersenne Twister,我正在为我正在编写的菱形方形地形生成器使用Mersenne twister的实现。使用单独的实现而不是内置的rand()的要点是,我希望每次都使用相同的种子生成相同的映射。菱形方块需要在每个像素上添加一个随机误差,所以我需要从一个种子中生成许多随机数。Mersenne twister对此很有用,但据我所知,此实现只生成一个随机数。我用整数参数替换了mt_init()中的rand()。但是,我无法进一步解释代码的头尾,因此我必须向您提问:我应该采取什么步骤,以便mt_random(n)返回它输出的

我正在为我正在编写的菱形方形地形生成器使用Mersenne twister的实现。使用单独的实现而不是内置的rand()的要点是,我希望每次都使用相同的种子生成相同的映射。菱形方块需要在每个像素上添加一个随机误差,所以我需要从一个种子中生成许多随机数。Mersenne twister对此很有用,但据我所知,此实现只生成一个随机数。我用整数参数替换了mt_init()中的rand()。但是,我无法进一步解释代码的头尾,因此我必须向您提问:我应该采取什么步骤,以便mt_random(n)返回它输出的Mersenne捻线机系列中的第n个随机数?

我会重新考虑使用
rand
srand
。如果您想要一个单独的随机函数,其状态不受对
rand
的正常调用的影响,您可以使用类似的方法

unsigned int my_seed = 42;

int my_rand()
{
    srand(my_seed);
    return my_seed = rand();
}

我会重新考虑使用
rand
srand
。如果您想要一个单独的随机函数,其状态不受对
rand
的正常调用的影响,您可以使用类似的方法

unsigned int my_seed = 42;

int my_rand()
{
    srand(my_seed);
    return my_seed = rand();
}

如果你需要更多的随机数,只要继续呼叫
mt\u random
任意次数。

如果你需要更多的随机数,只要继续呼叫
mt\u random
任意次数。

我认为你没有正确使用代码。PRNG通常在每次调用时返回下一个值,参数(如果存在用于缩放)。为什么不直接使用
srand
rand
来设置种子并获得一个可重复的伪随机序列呢?@Paul R:也许OP希望序列可以在不同的C实现中重复。@caf:这一点很好-这会让senseI觉得你没有正确使用代码。PRNG通常在每次调用时返回下一个值,参数(如果存在用于缩放)。为什么不直接使用
srand
rand
来设置种子并获得一个可重复的伪随机序列呢?@Paul R:也许OP希望序列可以在不同的C实现中重复。@caf:好的观点-这是有意义的