如何在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
}