我是用ran2()
函数在c中编程的代码. ran2()
被称为更真实的随机数生成器。我发现ran2()
也以相同的顺序生成数字。为什么会这样呢?ran2
采用长类型指针变量。ran2()
的代码可在Numerical recipes中找到。
这里我写我如何调用函数:
float temp;
long *seed,seed1;
seed=&seed1;
temp=ran2(seed);
在多次调用这个函数并运行多次之后,我看到每次都生成相同序列的数字。纠正我在哪里做的错误和什么修改需要得到真正的随机序列每一次。
2条答案
按热度按时间x8diyxa71#
ran2
的源代码说“调用idum
一个负整数来初始化”。ran2
的参数是long *idum
。因此,要使用ran2
,定义一个long
,将其设置为负值,并将指向它的指针传递给ran2
。在非敏感用途中,使用标准Ctime
函数获取用于初始化随机数生成的值并不罕见。你必须确保它是负面的。因此,您可以用途:pqwbnv8z2#
自30年前 Numerical Recipes 出版以来,伪随机数生成技术的发展水平已经有了相当大的进步。我不知道
ran2
是如何工作的,但我几乎可以保证现在有更好的选择。除非您试图重现专门使用
ran2
的旧研究的结果,否则您应该忘记您曾经听说过它。您的第一个选择应该是来自当前一代流密码的密钥流,例如。ChaCha20。在极不可能的情况下,这对您的应用程序来说不够快,MELG-64可能是我第二个尝试的。