调用随机数生成器ran2()在c中的数值配方中可用

xeufq47z  于 2023-05-22  发布在  其他
关注(0)|答案(2)|浏览(150)

我是用ran2()函数在c中编程的代码. ran2()被称为更真实的随机数生成器。我发现ran2()也以相同的顺序生成数字。为什么会这样呢?
ran2采用长类型指针变量。
ran2()的代码可在Numerical recipes中找到。
这里我写我如何调用函数:

float temp;
long *seed,seed1;
seed=&seed1;
temp=ran2(seed);

在多次调用这个函数并运行多次之后,我看到每次都生成相同序列的数字。纠正我在哪里做的错误和什么修改需要得到真正的随机序列每一次。

x8diyxa7

x8diyxa71#

  • Numerical Recipes* 中ran2的源代码说“调用idum一个负整数来初始化”。ran2的参数是long *idum。因此,要使用ran2,定义一个long,将其设置为负值,并将指向它的指针传递给ran2。在非敏感用途中,使用标准C time函数获取用于初始化随机数生成的值并不罕见。你必须确保它是负面的。因此,您可以用途:
long seed = time(0);
if (0 <= seed)
    seed = -1 - seed;
…
float x;
…
x = ran2(&seed);
pqwbnv8z

pqwbnv8z2#

自30年前 Numerical Recipes 出版以来,伪随机数生成技术的发展水平已经有了相当大的进步。我不知道ran2是如何工作的,但我几乎可以保证现在有更好的选择。
除非您试图重现专门使用ran2的旧研究的结果,否则您应该忘记您曾经听说过它。您的第一个选择应该是来自当前一代流密码的密钥流,例如。ChaCha20。在极不可能的情况下,这对您的应用程序来说不够快,MELG-64可能是我第二个尝试的。

相关问题