Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c/c++中按顺序创建伪随机数?_C++_C_Random_Time_Seed - Fatal编程技术网

如何在c/c++中按顺序创建伪随机数?

如何在c/c++中按顺序创建伪随机数?,c++,c,random,time,seed,C++,C,Random,Time,Seed,此代码不能同时创建多个随机数。 有没有一种方法不像Mersennes那样复杂,也不依赖于操作系统?PRNG不会一次创建很多PRN。每个输出都依赖于以前的输出,PRNG是高度有状态的 尝试: 即使是在单个函数调用中返回整个输出块的API,也只是在函数中移动了该循环。有许多好的随机数生成器,易于使用。只需在程序开始时调用sr一次。然后调用rand而不是srandrand来生成每个随机数。乔治·马萨格里亚(George Marsaglia)不久前在sci.math上发表了一篇文章 我不能说它有多好,也

此代码不能同时创建多个随机数。
有没有一种方法不像Mersennes那样复杂,也不依赖于操作系统?

PRNG不会一次创建很多PRN。每个输出都依赖于以前的输出,PRNG是高度有状态的

尝试:

即使是在单个函数调用中返回整个输出块的API,也只是在函数中移动了该循环。

有许多好的随机数生成器,易于使用。

只需在程序开始时调用sr一次。然后调用rand而不是srandrand来生成每个随机数。

乔治·马萨格里亚(George Marsaglia)不久前在sci.math上发表了一篇文章

我不能说它有多好,也不能说它的性能有多好,但你可能想试试


它应该独立于操作系统和平台。

请确保您回答了问题 嗯


效率可能会有问题…

我认为这句话这段代码不能同时创建许多随机数…不够清楚!重复多次。你只需要打一次电话给srand。然后你就一次又一次地给兰德打电话。基本上所有的PRNG都是这样工作的xkcd在哪里@这个?我刚意识到我把代码贴错了!我不会不止一次播种兰德。我将它播种一次,然后在一行中生成许多随机数时,它们的结果都是相同的,因为它们是基于当前的第二个。
srand(time(NULL));
for (it=hand.begin(); it < hand.end(); it++)
    (*it) = rand() % 13 + 1;
srand(time(NULL)); // once at the start of the program

for( int i = 0; i < N; ++i )
    r[i] = rand();
for (int i=n1; i < n2; ++i)
  { 
  int k; 
  do k = rand(); while (i !=k); 
  // k is a sequential pseudo random number
  }