2

使用C++11 #include<random>orBoost C++ Boost.Random是否可以使用一个种子以您可以选择的任意序列启动随机数生成器?

换句话说,我希望能够指定数字生成器在序列中的哪个位置开始,同时使用相同的种子。

例如,如果我正在使用mt19937具有周期长度的生成器,2^19937-1我想开始在周期长度中用户指定的位置生成随机数。假设我选择 1000,生成器将从循环长度的第 1000 个位置开始。

4

1 回答 1

8

是的。有一个成员discard(unsigned long long z)会为你做这件事。例如:

#include <random>
#include <cassert>

int main()
{
    std::mt19937 e1(6492);
    std::mt19937 e2(6492);
    const int N = 1000;
    for (int i = 0; i < N; ++i)
        e1();
    e2.discard(N);
    assert(e1() == e2());
}

这个程序不应该断言。

于 2013-03-15T02:44:21.960 回答