srand(time(NULL));
for (it=hand.begin(); it < hand.end(); it++)
(*it) = rand() % 13 + 1;
此代码无法一次创建许多随机数。 有没有一种方法可以做到不像Mersennes那么复杂,并且不依赖于操作系统?如何在c/C++中创建伪随机数?
srand(time(NULL));
for (it=hand.begin(); it < hand.end(); it++)
(*it) = rand() % 13 + 1;
此代码无法一次创建许多随机数。 有没有一种方法可以做到不像Mersennes那么复杂,并且不依赖于操作系统?如何在c/C++中创建伪随机数?
PRNGs不会一次创建多个PRN。每个输出都依赖于以前的输出,PRNG是高度有状态的。
尝试:
srand(time(NULL)); // once at the start of the program
for(int i = 0; i < N; ++i)
r[i] = rand();
即使API的是,在一个函数调用返回输出的整个街区,刚刚搬进函数内部的循环。
Boost.Random有很多很好的随机数发生器,易于使用。
只需在您的程序开始时拨打srand
一次。然后拨打rand()
(而不是srand(rand())
)生成每个随机数。
“请确认您回答这个问题” OK
for (int i=n1; i < n2; ++i)
{
int k;
do k = rand(); while (i !=k);
// k is a sequential pseudo random number
}
可能存在与效率问题...
我觉得这句话*“这个代码不工作创造大量的随机数一次“* ....不够清楚! – Nawaz 2011-04-16 17:19:33
重复多次。你只种子(即叫'srand')***一次***。然后你只需一遍又一遍地调用'rand'。基本上所有的PRNG都是这样工作的。 – dmckee 2011-04-16 17:19:58
xkcd在哪里? ... [啊! :)](http://xkcd.com/221/) – pmg 2011-04-16 17:20:50