提问人:user2052436 提问时间:11/14/2023 最后编辑:HolyBlackCatuser2052436 更新时间:11/16/2023 访问量:64
std::d iscrete_distribution 和随机数质量的内部状态
Internal state of std::discrete_distribution and random numbers quality
问:
我正在通过 迭代生成随机数。如果在每次迭代后重置分布的内部状态(这相当于在循环中创建对象),随机数的质量是否会降低:std::discrete_distribution
std::discrete_distribution
// inputs:
// int n_samples
// int n_energies
// double energies[n_energies]
std::mt19937_64 generator;
for (int i = 0; i < n_samples; ++i ) {
std::discrete_distribution<int> d(energies, energies + n_energies);
int index = d(generator);
// DO SMTH WITH INDEX
// energies array may change between iterations here.
}
我问的原因是迭代之间可能会发生变化(取决于算法流程,这是不可预测的)。energies
在一种边框情况下,它们会更改每次迭代,因此上面的代码是可以的,因为在这里我无能为力。
在另一种边框情况下,它们在迭代之间根本不会更改。这相当于重置 while 概率相同时的内部状态。std::discrete_distribution
在后一种情况下,生成的随机数的质量是否不如未重置分布状态(即在循环外创建对象)时的质量?std::discrete_distribution
答:
评论
discrete_distribution
generator
discrete_distribution
generator
discrete_distribution
energies
discrete_distribution
[0, 1]
generator
discrete_distribution
discrete_distribution
operator()