代码之家  ›  专栏  ›  技术社区  ›  The Quantum Physicist

是否可以为boost::random::uniform\u int\u distribution设置确定性种子?

  •  2
  • The Quantum Physicist  · 技术社区  · 6 年前

    我在用 boost::random::uniform_int_distribution<boost::multiprecision::uint256_t> multiprecision ,这就是为什么我需要使用boost而不是标准库。对于我的周期性测试,我需要从一个不确定的种子中生成确定的结果,但是以这样一种方式,我可以在测试失败的情况下稍后复制结果。

    所以,我会生成一个真正的随机数,用作种子,然后注入到 uniform_int_distribution . 这样做的目的是,如果测试失败,我将能够用导致测试失败的同一个种子重现问题。

    我目前生成随机数的方法是:

    boost::random::random_device                                              gen;
    boost::random::uniform_int_distribution<boost::multiprecision::uint256_t> dist{100, 1000};
    auto random_num = dist(gen);
    

    PS:请注意,首要要求是支持 . 我需要16位到512位的数字。这是为了测试,所以性能不是真正的要求。我可以用其他方法生成大的随机数并将它们转换为 boost::multiprecision .

    1 回复  |  直到 6 年前
        1
  •  3
  •   tkausl    6 年前

    这个 boost::random::random_device 是一个 Non-deterministic Uniform Random Number Generator 是的 Pseudo-Random Number Generator boost::random::mt19937 .

    这台发电机通常由一台发电机播种 真实的 在单元测试中可以打印出可复制性的随机数:

    auto seed = boost::random::random_device{}();
    std::cout << "Using seed: " << seed << '\n';
    boost::random::mt19937 gen{ seed };
    boost::random::uniform_int_distribution<boost::multiprecision::uint256_t> dist{100, 1000};
    auto random_num = dist(gen);