如何使用gcc 7.2.0在64位Debian Linux上的C中创建两个独立的随机数生成器(无需加密安全)?
其中一个RNG应使用srand(time(NULL));
提供随机数种子,而另一个应使用命令行参数进行初始化,以创建可重复的实验。
下面的示例将使用两个不同的值为相同的RNG播种,这将如何有两个不同的rand()
调用?
#include <stdlib.h>
#include <time.h>
int main(int argc, char**argv)
{
// seed first RNG
srand(time(NULL));
// seed second RNG
srand(argv[1]);
// use both RNGs in production code for
// different purposes ...
return 0;
}
这样做的目的是,我使用一个RNG动态生成问题实例,在所有实验运行中应该是相同的,因此在所有程序重启时遵循相同的种子。算法使用第二个RNG,它要求每个程序执行的(伪)RNG不同。
答案 0 :(得分:4)
rand
不是完成任务的好工具。
由于您使用的是POSIX系统,因此最好查看drand48
系列函数。这些变体允许您将种子向量指定为函数参数,例如erand48
。有了它们,您可以只使用两个不同的种子向量,并根据自己的喜好调用该函数。