我有这个代码:
static std::mt19937 rnd;
// ...
static uint32_t rndInt(uint32_t min, uint32_t max) {
return std::uniform_int_distribution<uint32_t>(min,max)(rnd);
}
Run Code Online (Sandbox Code Playgroud)
这是好的做法还是应该存储uniform_int_distribution?
我怀疑分发对象的创建和销毁成本很高,尽管我认为它可能比存储参数稍微多一些min,max.它可能会根据参数预先计算一些有用的值,例如,显而易见的实现2**32 % (max-min+1)是生成器中将被丢弃和重新尝试的不同值的数量.
原则上,允许分发对象在其内部存储一些熵,这些熵是在先前调用时从生成器中提取的operator(),但不是必需的.这些位可以用于以后的operator()调用.因此,如果min==0和max==1,那么你可以operator()在发电机的每个呼叫上进行32 次呼叫.这就是该reset()功能的用途,以清除这种状态.
所以,如果你重复使用相同的最小值/最大值,然后在技术上你的每一次使用新的分配浪费随机位 - 你也许可以最终用更少的调用引擎比,如果你不停地围绕着分配的对象.但我怀疑这很重要,特别是因为MT很快.
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |