c – 我应该保留随机分布对象实例还是可以总是重新创建它?

前端之家收集整理的这篇文章主要介绍了c – 我应该保留随机分布对象实例还是可以总是重新创建它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个代码
static std::mt19937 rnd;

// ...

static uint32_t rndInt(uint32_t min,uint32_t max) {
    return std::uniform_int_distribution<uint32_t>(min,max)(rnd);
}

这是好的做法还是应该存储uniform_int_distribution?

解决方法

我怀疑分发对象的创建和销毁是昂贵的,尽管我认为它可能稍微超过只存储参数min,max.它可以基于参数预先计算一些有用的值,例如在明显的实现中2 ** 32%(max-min 1)是将被丢弃和重新尝试的来自发生器的不同值的数量.

原则上,允许分配对象在其中存储在先前对operator()的调用中从发生器获取的一些熵,但不是必需的.这些位可以用于稍后的operator()调用.所以如果min == 0和max == 1,那么你可以在生成器上每次调用的分配上得到32次对operator()的调用.这就是reset()函数,清除这个状态.

因此,如果您重复使用相同的最小/最大值,那么在技术上,您每次都会浪费随机位数,因为每次都使用新的分发 – 如果您保留分发对象,您可能会减少对引擎的调用.但是我怀疑这件事很重要,特别是因为MT很快.

猜你在找的C&C++相关文章