std::discrete_distribution 的内部状态和随机数质量

问题描述 投票:0回答:1

我通过

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
可能会在迭代之间发生变化(取决于算法流程,这是不可预测的)。

在一种边界情况下,他们会更改每次迭代,因此上面的代码没问题,因为我在这里无能为力。

在另一种边界情况下,它们在迭代之间根本不会改变。这相当于在概率相同的情况下重置

std::discrete_distribution
的内部状态。

在后一种情况下,生成的随机数的质量是否低于未重置分布状态时的质量(即在循环外创建

std::discrete_distribution
对象)?

c++11 random
1个回答
0
投票

根据@pjs 和@Igor Tandetnik 评论,答案是:

不,随机数的质量不会降低。

discrete_distribution
本身不包含任何不确定的内部状态。它只是执行简单的确定性数学,将均匀 [0, 1] 分布转换为离散分布。

© www.soinside.com 2019 - 2024. All rights reserved.