ent*_*heh 4 c++ random performance
例如:
for (...)
{
... std::uniform_real_distribution<float>(min, max)(rng) ...
}
Run Code Online (Sandbox Code Playgroud)
直觉上,在我看来构造函数除了存储两个值之外不需要做太多,并且在uniform _*_ distribution实例中不应该有任何状态.我自己没有对它进行分析(我还没有在项目的那个阶段),但我觉得这个问题属于那里:)
我知道这对于某些分布类型来说是个坏主意 - 例如,std::normal_distribution可能会成对生成它的数字,而第二个数字每次都会被浪费掉.
我觉得我拥有的东西比仅仅访问rng()和自己做数学更具可读性,但是如果还有其他方法可以更直接地写这个,我会感兴趣.
std::uniform_real_distribution的对象是轻量级的,因此每次在循环中构造它们都不是问题.
有时,隐藏的内部分发状态很重要,但在这种情况下则不然.reset()函数在所有流行的STL实现中什么都不做:
void
reset() { }
Run Code Online (Sandbox Code Playgroud)
例如,它不适用于std::normal_distribution:
void
reset()
{ _M_saved_available = false; }
Run Code Online (Sandbox Code Playgroud)