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

在C中创建两个不同种子的独立RNG,c,random,C,Random,如何使用gcc 7.2.0在64位Debian Linux上创建两个独立的随机数生成器,而无需在C中加密安全? 两个RNG中的一个应使用srandtimeNULL;提供随机数种子;,而另一个应使用命令行参数初始化,以创建可重复的实验。 下面的示例将使用两个不同的值为同一个RNG播种,使用两个不同的rand调用如何工作 这样做的目的是,我使用一个RNG动态生成问题实例,在所有实验运行中都应该相同,因此在所有程序重新启动时遵循相同的种子。第二个RNG由算法使用,它要求在每次程序执行时使用不同的伪RN

如何使用gcc 7.2.0在64位Debian Linux上创建两个独立的随机数生成器,而无需在C中加密安全? 两个RNG中的一个应使用srandtimeNULL;提供随机数种子;,而另一个应使用命令行参数初始化,以创建可重复的实验。 下面的示例将使用两个不同的值为同一个RNG播种,使用两个不同的rand调用如何工作

这样做的目的是,我使用一个RNG动态生成问题实例,在所有实验运行中都应该相同,因此在所有程序重新启动时遵循相同的种子。第二个RNG由算法使用,它要求在每次程序执行时使用不同的伪RNG。

rand不是执行任务的好工具


由于您使用的是POSIX系统,因此最好查看drand48系列函数。这些变量允许您将种子向量指定为函数参数,例如erand48。有了它们,你就可以有两个不同的种子向量,然后用你喜欢的一个来调用函数。

另外,你在哪个平台上?一些平台将支持drand48_r及其同类产品,这让您可以做到这一点,但您不能简单地用rand和Srand实现您的要求。您想解决什么问题?任何真正的随机数生成器中的数字都是相互独立的,因此,随机数生成器的实际数量应该无关紧要。@AndrewHenle:为了模拟和测试,他可能希望一个RNG每次运行时都产生不同的随机数序列,而另一个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;
}