C++;11/Boost随机库,在循环中的指定点开始生成 < > >使用 C++ 11,包含 >代码> Boost C++ + Booad。

C++;11/Boost随机库,在循环中的指定点开始生成 < > >使用 C++ 11,包含 >代码> Boost C++ + Booad。,c++,boost,random,c++11,C++,Boost,Random,C++11,换句话说,我希望能够在使用相同种子的情况下,指定数字生成器在序列中的开始位置 例如,如果我正在使用周期长度为mt19937的生成器2^19937-1我希望在周期长度中用户指定的位置开始生成随机数。假设我选择1000,发电机将在循环长度的第1000个位置启动。是。有一个成员discard(unsigned long z)为您执行此操作。例如: #include <random> #include <cassert> int main() { std::mt1993

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


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

是。有一个成员
discard(unsigned 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());
}
#包括
#包括
int main()
{
标准:mt19937 e1(6492);
标准:mt19937 e2(6492);
常数int N=1000;
对于(int i=0;i

此程序不应断言。

您是说您希望能够配置RNG(例如,通过给它一个特定的种子),以便它首先生成特定的值序列吗?或者你只是想让它在循环中的一个特定位置开始,但你不在乎产生了什么值?@NateKohl对,所以第二个是我想要的,种子可以是任何东西,让我们说我们使用种子
X
,给定
。种子(X)
操作a我想在循环开始时开始,对于操作B,我想从循环的第100000个位置开始。A和B都使用相同的种子和生成器。(1)我完全不知道
丢弃
。(2) 我认为答案应该围绕
(6492)