在 random double 范围内创建随机整数
Create random integer in range from random double
我从 mersenne twister 得到随机双数 [0,1)。
我如何从 mersenne twister 输出中获得随机 [0,x)?
梅森扭曲器输出总范围内的随机整数或随机 [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';
}
(取自 here)在 [1,2] 中生成值,该站点解释了如何为任意 [a,b)!
生成值
如果需要整数,请使用 std::uniform_int_distribution。
floor(mersenneRandom()*x)
确实不起作用,因为 double
值与下一个更大的值之间的差异对于大数来说变得大于 1。您将跳过这两个值之间的所有整数。
我从 mersenne twister 得到随机双数 [0,1)。 我如何从 mersenne twister 输出中获得随机 [0,x)?
梅森扭曲器输出总范围内的随机整数或随机 [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';
}
(取自 here)在 [1,2] 中生成值,该站点解释了如何为任意 [a,b)!
生成值如果需要整数,请使用 std::uniform_int_distribution。
floor(mersenneRandom()*x)
确实不起作用,因为 double
值与下一个更大的值之间的差异对于大数来说变得大于 1。您将跳过这两个值之间的所有整数。