簡體   English   中英

重置2個數字之間的C ++隨機數

[英]C++ random number between 2 numbers reset

下面的函數可以運行,但是每次我運行該程序時始終返回相同的數字。 有沒有一種方法可以生成每次運行程序時都不同的隨機數?

int getrand(int min,int max){
 int rnum = rand()%(max-min)+min;
 return rnum;  
} 

您可能想使用高質量的標准庫隨機數生成工具:

#include <random>

typedef std::mt19937 rng_type;
std::uniform_int_distribution<rng_type::result_type> udist(min, max);

rng_type rng;

int main()
{
  // seed rng first:
  rng_type::result_type const seedval = 4; // or implement a good get_seed()?
  rng.seed(seedval);

  rng_type::result_type random_number = udist(rng);

  return random_number;
}

試試這個:

/* initialize random seed: */
  srand ( time(NULL) );

程序啟動時的某個位置( 絕對不在getrand()函數中)。 這將迫使發電機每次以不同的種子啟動。

好像您忘了srand

使用偽隨機數生成器之前,需要對其進行“植入”; 每次的默認種子都是相同的,因此您將獲得相同的序列。

通常,您使用srand(time(NULL)) ,但是如果您在一秒鍾內再次運行該程序,則此操作將失敗。

播種后用完一兩個隨機數也很好,因為前幾個值與種子本身高度相關。

您需要啟動種子。 退房srand 另外,如果需要,請嘗試升壓:

boost::lagged_fibonacci607 base_prng(seed);
boost::variate_generator<boost::lagged_fibonacci607&,boost::uniform_smallint<> > prng(base_prng,boost::uniform_smallint<>(min,max))

一個簡單的隨機化一次解決方案是:

int getrand(int min, int max) {
  static bool init = false;

  if (!init) {
    srand(time(NULL));
    init = true;
  }

  return rand()%(max-min)+min; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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