预期在每个下一个数字请求之前重新初始化的
std::default_random_engine generator;
int p[10]={};
for (int i=0; i<nrolls; ++i) {
std::uniform_int_distribution<int> distribution(0,9);
int number = distribution(generator);
++p[number];
}
具有相同的分布
std::uniform_int_distribution<int> distribution(0,9);
std::default_random_engine generator;
int p[10]={};
for (int i=0; i<nrolls; ++i) {
int number = distribution(generator);
++p[number];
}
我已经检查过,对于均匀分布和正态分布,它在经验上是正确的。我可以从
最佳答案
我基本上做了你的第一个实现所做的事情。每次我需要发行版时就构建一个。
也就是说,是的,不同发行版的行为是 guaranteed by the standard以特定的方式行事。
STL recommends ,由于发行版相对便宜,因此不必担心每次需要一个发行版或需要一个新系列时都要构建一个发行版。他还说,如果你不想每次都构建一个,你可以使用 param改变分布范围的成员函数。
如果上述直接 Youtube 链接失效(寻求 30 分钟内),则 Microsoft Channel9 链接:https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
编辑
我正在重新观看几年前的一次 CppCon 演讲,其中讨论了这个确切的问题。结果?将分布构建为局部变量甚至在循环内 is 4.5 times faster .
关于c++ - 重新初始化随机分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67067409/