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