2

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

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

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

如果是这样,那就太好了。

4

1 回答 1

4

另一个案例供您最喜欢的参考

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

于 2015-01-19T17:43:42.783 回答