随机数生成器,可以在<中获得不同的数字。一秒

时间:2009-01-06 23:03:02

标签: c++ random

我需要一个C ++(伪,我不在乎)随机数生成器,每次调用该函数时都可以得到不同的数字。这可能只是我播种它的方式,也许有更好的方法,但我得到的每个随机生成器每次调用时都不会生成新的数字。我有时需要每秒获得几个随机数,任何RNG i插件都会连续几次获得相同的数字。 当然,我知道为什么,因为它是由第二个播种的,所以它每秒只生成一个新的数字,但我需要以某种方式在每次通话时得到一个新数字。谁能指出我正确的方向?

6 个答案:

答案 0 :(得分:17)

听起来像你这样做:

int get_rand() {
    srand(time(0));
    return rand();
}

这可以解释为什么你会在一秒钟内获得相同的数字。但你必须这样做:

int get_rand() {
    return rand();
}

在程序启动时调用一次

答案 1 :(得分:7)

您只需在启动时使用srand()为生成器播种一次,然后再调用rand()函数。如果使用相同的种子为发生器播种两次,每次都会得到相同的值。

答案 2 :(得分:4)

你应该只为PRNG播种一次

答案 3 :(得分:3)

Boost.Random有各种相当不错的随机数生成器。

答案 4 :(得分:1)

如果您生成大量随机数,可以尝试使用XORShift生成器。多头(8位):

// initial setup
unsigned long x = ... init from time etc ...
// each time we want a random number in 'x':
x ^= x << 21;
x ^= x >> 35;
x ^= x << 4;

答案 5 :(得分:0)

此代码仅生成一次唯一的随机数。

#include <ctime>
# include <iostream>
using namespace std;


int main()
{

      int size=100;
      int random_once[100];
      srand(time(0));

      for (int i=0;i<size;i++)  // generate unique random number only once
      {
          random_once[i]=rand() % size;
          for(int j=0;j<i;j++) if (random_once[j]==random_once[i]) i--;   
      }

      for ( i=0;i<size;i++) cout<<" "<<random_once[i]<<"\t";

  return 0;