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

时间:2011-04-16 17:16:20

标签: c++ c random time seed

srand(time(NULL));
for (it=hand.begin(); it < hand.end(); it++)
    (*it) = rand() % 13 + 1;

此代码不能一次创建许多随机数。 有没有办法做到不像Mersennes那么复杂并且不依赖于操作系统?

5 个答案:

答案 0 :(得分:4)

PRNG不会立刻创建多个PRN。每个输出都取决于先前的输出,PRNG是高度有状态的。

尝试:

srand(time(NULL)); // once at the start of the program

for( int i = 0; i < N; ++i )
    r[i] = rand();

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

答案 1 :(得分:2)

在程序开始时只调用srand一次。然后拨打rand() srand(rand()))以生成每个随机数。

答案 2 :(得分:1)

Boost.Random有很多好的随机数生成器,易于使用。

答案 3 :(得分:0)

George Marsaglia不久前在sci.math发布了Multiply With Carry PRNG

我不能说它有多好或它的表现如何,但你可能想尝试一下。

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

答案 4 :(得分:0)

“请确保你回答这个问题” 行

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

可能存在效率问题......