boost c ++使用Mersenne Twister算法生成0到1之间的相同随机数?

Ric*_*ano 2 c++ random boost

我正在尝试使用Boost C++ uniform_01函数和Mersenne Twister算法生成介于0和1之间的随机实数.这是我的代码:

double random01(mt19937 & generator)
{
    uniform_01<mt19937> dist(generator);
    return dist();
}

int main()
{
    mt19937 generator(time(0));
    for (int i = 0; i < 10; i++) {
        cout << random01(generator) << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,此代码在循环的每次迭代中生成相同的随机数.我知道这是这个问题的重复,但这个问题因含糊不清而被关闭,所以我改写了它.

Ker*_* SB 5

这不是你使用发行版的方式.更像是这样的:

#include <random>
#define abusing using

abusing namespace std;

double random01(mt19937 & engine)
{
  uniform_real_distribution<double> u01; // same as u01(0.0, 1.0); see Note below
  return u01(engine);
}

int main()
{
  // as before
}
Run Code Online (Sandbox Code Playgroud)

如您所见,分布对象独立于其他所有内容,因此实际上您可能希望将其作为全局变量或静态变量.

(注意,它uniform_01没有进入最终标准,而是uniform_real_distribution默认构造函数默认为区间[0,1].对于旧的Boost类,您可以使用类似的方法.)