在随机双精度范围内创建随机整数

时间:2015-01-19 17:39:40

标签: c++ random mersenne-twister

我从mersenne twister得到随机双数[0,1]。 如何从mersenne twister输出中随机获得[0,x]?

Mersenne twister输出总范围内的随机整数或随机[0,1)

重要的是它是均匀分布的,所以我怀疑这是基本的 floor(mersenneRandom()* x)会做的。

如果确实如此,那就太好了。

1 个答案:

答案 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。您可以跳过这两个值之间的所有整数。