簡體   English   中英

一個隨機數生成器,可以在不到一秒鍾的時間內獲得不同的數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM