c++ - 每次在循环中进行临时均匀随机分布的效率如何?

标签 c++ performance random

例如:

for (...)
{
    ... std::uniform_real_distribution<float>(min, max)(rng) ...
}

在我看来,直觉上构造函数除了存储这两个值外不需要做太多事情,并且 uniform_*_distribution 实例中不应该有任何状态。我自己还没有对它进行分析(我还没有处于项目的那个阶段),但我觉得这个问题属于那里:)

我知道这对于某些分布类型来说不是一个好主意 - 例如,std::normal_distribution 可能会成对生成它的数字,而第二个数字每次都会被浪费。

我觉得我所拥有的比仅仅访问 rng() 并自己进行数学计算更具可读性,但如果有任何其他方法可以更直接地编写它,我会很感兴趣。

最佳答案

std::uniform_real_distribution 的对象是轻量级的,因此每次在循环内构造它们不是问题。

有时,分布的隐藏内部状态很重要,但在这种情况下并不重要。 reset() 函数在所有流行的 STL 实现中什么都不做:

void
reset() { }

例如,std::normal_distribution 不成立:

void
reset()
{ _M_saved_available = false; }

关于c++ - 每次在循环中进行临时均匀随机分布的效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34934480/

相关文章:

java - 如何在 Java 中创建 64 位唯一整数

c++ - 使用 gcc 静态编译一些包时出现关于 libprocps.a 的错误

java - 自定义迭代器很慢

c++ - 将无向连通图分成两个部分

javascript - 可以在一个组件里面声明其他组件吗?

Android - 在 View 中高效更新计数器

python - random.randint 不生成随机值

python - 如何使用某种 "momentum"生成随机方向(N、S、E、W、无)?

c++ - 如何从命令行 (unix) 打印二进制 double 组

c++ - CUDA 点积