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

时间:2011-12-09 17:18:28

标签: c++ random numbers

以下功能运行,但每次运行程序时始终返回相同的数字。有没有办法在每次运行程序时生成不同的随机数?

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

6 个答案:

答案 0 :(得分:6)

您可能希望使用高质量的标准库随机数生成工具:

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

答案 1 :(得分:2)

试试这个:

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

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

答案 2 :(得分:1)

好像忘记拨打srand

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

你需要发起种子。查看srand。另外,如果你想要尝试提升:

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

答案 5 :(得分:0)

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

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

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

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