[英]How do I make spaces between numbers in a random number generated app in 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.