Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以为boost::random::uniform\u int\u distribution设置确定性种子<>;?_C++_C++11_Random_Boost_Boost Multiprecision - Fatal编程技术网

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 twister
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);
autoseed=boost::random::random_设备{}();

标准::cout
统一整数分布
不会生成任何随机数,它只是一个分布。您需要查看引擎,而不是分布情况。@tkausl您是对的。让我补充更多细节。