boost c++正在使用Mersenne Twister算法生成0到1之间的相同随机数
boost c++ is generating the same random number between 0 and 1, using the Mersenne Twister algorithm?
我试图生成0和1之间的随机实数,使用Boost c++ uniform_01
函数和Mersenne Twister算法。这是我的代码:
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;
}
然而,这段代码在循环的每次迭代中生成相同的随机数。我知道这是在重复这个问题,但那个问题因为模棱两可而被关闭了,所以我重新措辞了一下。
这不完全是使用分布的方式。更像这样:
#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
}
正如您所看到的,分布对象是独立于其他所有内容的,因此实际上您可能希望将其设置为全局变量,或者可能是静态变量。
(注意uniform_01
没有进入最终标准,但uniform_real_distribution
的默认构造函数默认为区间[0,1])。对于旧的Boost类,您可以使用类似的方法。
在函数外部创建uniform_01。您需要在同一个实例上工作以获得连续的数字。或者,您可以将其设置为静态
相关文章:
- 查找彼此之间具有不同最小距离的随机数
- 使用 std::binomial_distribution 在范围之间生成随机数
- 如何在 C++ 中获取 5 到 -5 之间的随机数
- C++ 和 Python 实现之间的不同伪随机数
- 生成随机数,并保证在给定域之间覆盖所有
- 我如何确保我的随机数在兰德生成的0和1之间不是0
- 在[0,1)C 之间生成一个随机数
- 0-1之间的随机数生成以填充容器
- 盒子muller随机数在C 中的0到1之间
- 在random_device和seed_seq之间做出决定,为多个随机数序列生成种子
- C++ 中介于 0 和 1 之间的随机数
- 本应生成 2 个介于 1 和 9 之间的随机数的程序C++只生成 6 和 9 并且没有正确循环
- 在0到1之间生成随机数
- 分叉进程之间的随机数是相同的
- 如何在 c++ 中生成 0 到 4 之间的随机数
- 介于 2 个值之间的随机数
- 如何在我存储的两个变量之间生成随机数
- 使用 C++ 的 1 到 10 之间的随机数
- 如何在c++中生成一个介于1和16之间的随机数
- C++生成一个介于 0 和 100,000 之间的随机数