对均匀分布的随机数的“想当然”带来的bug

对均匀分布的随机数的“想当然”带来的bug
要用到随机数,想了想既然学了boost,就不用c的函数了。
找了找boost手册。

想随机等待3 - 40分钟。

std::tr1::mt19937 eng;
std::tr1::uniform_int< int>  unif(3, 40);
int wait_miniute = unif(eng);

写了个测试程序。
for( int i = 0; i < 40; ++i)
  std::cout << unif(eng) << std::endl;

发现效果不错。马上加到产品中提交了代码。结果测试发现,每次第一个都是33分钟。

原来是种子的问题。
伪随机数就是这样。

srand( (unsigned)time( NULL ) );
int wait_miniute = 3 + rand() % 40;

基本概念啊。……

你可能感兴趣的:(对均匀分布的随机数的“想当然”带来的bug)