我从mersenne twister得到随机双数[0,1]。 如何从mersenne twister输出中随机获得[0,x]?
Mersenne twister输出总范围内的随机整数或随机[0,1)
重要的是它是均匀分布的,所以我怀疑这是基本的 floor(mersenneRandom()* x)会做的。
如果确实如此,那就太好了。
答案 0 :(得分:4)
favorite reference的另一种情况!
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(1, 2);
for (int n = 0; n < 10; ++n) {
std::cout << dis(gen) << ' ';
}
std::cout << '\n';
}
(取自here)在[1,2]中生成值,该网站解释了如何为任意[a,b]执行此操作!
如果您需要整数,请使用std::uniform_int_distribution。
floor(mersenneRandom()*x)
确实不起作用,因为double
- 值与下一个更大值之间的差异对于大数字而言大于1。您可以跳过这两个值之间的所有整数。