c – 我应该保留随机分布对象实例还是可以总是重新创建它?
发布时间:2020-12-16 05:42:52 所属栏目:百科 来源:网络整理
导读:我有这个代码: static std::mt19937 rnd;// ...static uint32_t rndInt(uint32_t min,uint32_t max) { return std::uniform_int_distributionuint32_t(min,max)(rnd);} 这是好的做法还是应该存储uniform_int_distribution? 解决方法 我怀疑分发对象的创建
我有这个代码:
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很快. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |