c++中2个数字之间的随机数重置

C++ random number between 2 numbers reset

本文关键字:随机数 之间 2个 数字 c++      更新时间:2023-10-16

下面的函数运行了,但每次运行程序时总是返回相同的数字。是否有一种方法可以在每次运行程序时生成不同的随机数?

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;
}

try with this:

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

在程序启动时的某个位置(绝对不在getrand()函数中)。这将强制生成器每次使用不同的种子启动。

你好像忘记给srand打电话了

伪随机数生成器在使用之前需要"播种";默认的种子每次都是相同的,所以你得到相同的序列。

通常使用srand(time(NULL))之类的东西,但如果在一秒钟内再次运行程序,则会失败。

在播种后使用一两个随机数也很好,因为前几个值与种子本身高度相关。

随机化一次的简单解决方案是:

int getrand(int min, int max) {
  static bool init = false;
  if (!init) {
    srand(time(NULL));
    init = true;
  }
  return rand()%(max-min)+min; 
}

需要初始化种子。看看srand。此外,如果需要,可以尝试boost:

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