C++ 是否可以为boost::random::uniform\u int\u distribution设置确定性种子<>;?
我正在使用C++ 是否可以为boost::random::uniform\u int\u distribution设置确定性种子<>;?,c++,c++11,random,boost,boost-multiprecision,C++,C++11,Random,Boost,Boost Multiprecision,我正在使用boost::random::uniform\u int\u distribution生成一些单元测试。请注意,我使用的是multiprecision,这就是为什么我需要使用boost而不是标准库。对于我的定期测试,我需要从一个不确定的种子中生成确定的结果,但是以这样一种方式,如果测试失败,我可以在以后复制结果 因此,我将生成一个真正的随机数并用作种子,然后将其注入到均匀分布。这样做的目的是,如果失败,我将能够用导致测试失败的同一种子重现问题 boost的这一部分是否支持在其接口中生成
boost::random::uniform\u int\u distribution
生成一些单元测试。请注意,我使用的是multiprecision
,这就是为什么我需要使用boost而不是标准库。对于我的定期测试,我需要从一个不确定的种子中生成确定的结果,但是以这样一种方式,如果测试失败,我可以在以后复制结果
因此,我将生成一个真正的随机数并用作种子,然后将其注入到
均匀分布。这样做的目的是,如果失败,我将能够用导致测试失败的同一种子重现问题
boost的这一部分是否支持在其接口中生成基于种子的随机数?如果没有,还有其他方法吗
我目前生成随机数的方式是:
boost::random::random_device gen;
boost::random::uniform_int_distribution<boost::multiprecision::uint256_t> dist{100, 1000};
auto random_num = dist(gen);
boost::random::random\u设备gen;
boost::random::uniform_int_distribution dist{1001000};
自动随机数=dist(gen);
PS:请注意,主要要求是支持多精度
。我需要16位到512位的数字。这是为了测试,所以性能不是真正的要求。我可以用其他方法生成大的随机数,并将它们转换为boost::multiprecision
boost::random::random\u设备
是一个非确定性均匀随机数生成器
,一个真正的随机数生成器。除非您需要真正的非确定性随机数,否则您可以使用伪随机数生成器
(至少出于测试目的),该生成器可以播种。一个已知的伪随机数生成器是mersenne twisterboost::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);
autoseed=boost::random::random_设备{}();
标准::cout统一整数分布
不会生成任何随机数,它只是一个分布。您需要查看引擎,而不是分布情况。@tkausl您是对的。让我补充更多细节。