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

Uniform random numbers are the same in all runs

本文关键字:运行 随机数      更新时间:2023-10-16

我找到了一种在范围(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 循环中创建的随机序列是完全相同的。如何在不同的运行中创建不同的随机数?

使用非确定性随机数引擎来播种性能更高、确定性的引擎,如 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