如何解决重新初始化随机分布
期望
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 成员函数来改变分布范围。
Microsoft Channel9 链接,如果上面的直接 Youtube 链接失效(请在 30 分钟内进入):https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
编辑
我正在重新观看几年前讨论这个确切问题的 CppCon 演讲。结果?将分布构建为局部变量甚至在循环内 is 4.5 times faster。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。