[英]A random number generator that can get different numbers in < a second
我需要一個C ++(偽,我不在乎)隨機數生成器,每次調用該函數時,它可以獲取不同的數字。 這可能只是我播種的方式,也許有更好的方法,但是我擁有的每個隨機生成器不會在每次調用時生成新的數字。 我有時需要每秒獲取幾個隨機數,而我插入的任何RNG往往會連續多次獲得相同的數。 當然,我知道為什么,因為它是秒種的,所以它每秒只產生一個新號碼,但是我需要以某種方式在每次通話中獲得一個新號碼。 誰能指出我正確的方向?
聽起來像這樣:
int get_rand() {
srand(time(0));
return rand();
}
這可以解釋為什么您在一秒鍾內得到相同的數字。 但是您必須這樣做:
int get_rand() {
return rand();
}
並在程序啟動時調用一次 srand。
您只需在啟動時使用srand()
為生成器添加一次種子,之后只需調用rand()
函數即可。 如果使用相同的種子為生成器兩次種子,則每次將獲得相同的值。
您只能將PRNG播種一次 。
Boost.Random具有各種非常好的隨機數生成器。
如果要生成大量隨機數,則可以嘗試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;
此代碼僅生成一次唯一的隨機數。
#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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.