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