在C中创建两个不同种子的独立RNG

时间:2018-01-09 15:39:50

标签: c random

如何使用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不同。

1 个答案:

答案 0 :(得分:4)

rand不是完成任务的好工具。

由于您使用的是POSIX系统,因此最好查看drand48系列函数。这些变体允许您将种子向量指定为函数参数,例如erand48。有了它们,您可以只使用两个不同的种子向量,并根据自己的喜好调用该函数。

相关问题