所有运行中的统一随机数相同

时间:2017-10-14 18:43:04

标签: c++ random

我找到了一种在范围(aa,bb)中生成均匀随机数的方法,如下所示:

#include <random>
double randnum (double aa, double bb)  //defining a function to create random numbers
{
  static std::default_random_engine generator;
  std::uniform_real_distribution<double> distribution (aa,bb);
  return distribution(generator);
}
    int main (){
for (i=1;i<50;i++){
    cout<< randnum(0,1);
}
    }

例如,randnum(0,1);创建一个介于0和1之间的随机数。问题是,在不同的运行期间,我在for循环中创建的随机序列完全相同。如何在不同的运行期间创建不同的随机数?

1 个答案:

答案 0 :(得分:2)

使用一个非确定性的随机数引擎来播种一个性能更高,确定性更强的引擎,就像mersenne twister一样:

#include <iostream>
#include <random>

double randnum (double aa, double bb) { //defining a function to create random numbers
    static std::random_device rd; // non-deterministic, but may be slow
    static std::mt19937 engine{ rd() };
    std::uniform_real_distribution<double> distribution (aa,bb);
    return distribution(engine);
}

int main() {
    for(int i=1; i<50; i++) {
        std::cout<< randnum(0,1);
    }
}

https://ideone.com/dgvarY