c++ - 重新初始化随机分布

标签 c++ c++11 random

预期在每个下一个数字请求之前重新初始化的 分布与初始化一次的行为方式是否合理?换句话说,这样做是:

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/

相关文章:

c++ - FFMPEG:解码 H264 流时无法释放 AVPacket?

c++ - 为什么这个非常简单的 return std::move(thread handle) 会失败?

arrays - 在少数元素中分配较大的值

java - MersenneTwister 发电机

c++ - 一致地将 C++ 类成员定义为唯一指针;

c++ - 为什么 vector<Data*>::iterator 有效而 vector<Data*>*::iterator 无效?

c++ - std::unordered_multiset 插入的复杂性

c++ - std::async 可以调用 std::function 对象吗?

javascript - 使用带有偏差的 Random()

c++ - iptables C++ 控制