我从 mersenne twister 获得随机双数 [0,1)。我如何从 mersenne twister 输出中获得随机 [0,x)?
Mersenne twister 输出总范围内的随机整数或随机 [0,1)
它的均匀分布很重要,所以我怀疑基本 floor(mersenneRandom()*x) 会不会。
如果是这样,那就太好了。
我从 mersenne twister 获得随机双数 [0,1)。我如何从 mersenne twister 输出中获得随机 [0,x)?
Mersenne twister 输出总范围内的随机整数或随机 [0,1)
它的均匀分布很重要,所以我怀疑基本 floor(mersenneRandom()*x) 会不会。
如果是这样,那就太好了。
另一个案例供您最喜欢的参考!
#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';
}
(取自此处)在 [1,2) 中生成值,该站点解释了如何为任意 [a,b) 执行此操作!
如果您需要整数,请使用std::uniform_int_distribution。
floor(mersenneRandom()*x)
确实不起作用,因为double
对于大数,一个 -value 和下一个更大的值之间的差异变得大于 1。您将跳过这两个值之间的所有整数。