在 random double 范围内创建随机整数

Create random integer in range from random double

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

梅森扭曲器输出总范围内的随机整数或随机 [0,1)

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

如果是,那就太好了。

你的 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。您将跳过这两个值之间的所有整数。