【发布时间】:2020-01-31 04:46:40
【问题描述】:
据我了解,当用于拉取随机数时,分布不应改变。例如,对于均匀分布,它的最小值/最大值在我们使用它生成随机数时不应该改变,那么为什么operator() 不是 const 呢?
【问题讨论】:
-
有些发行版一次计算多个随机数并缓存它们,以加快处理速度。他们可以使用
mutable。 -
@MarcGlisse 哪些发行版可以做到这一点,它是如何工作的?它不知道接下来会调用哪个生成器。即使可以 - 从精心播种的生成器中选择多个数字也是不友好的:-)
-
在 libstdc++ 中,正态分布一次计算 2 个随机数。下次调用它时,它不会使用传递给它的生成器。
-
@TedLyngmo FWIW,与需要在 N 次调用后给出特定值的标准 PRNG 不同,所有标准分布仅由概率函数定义。只要它们满足这一点,就没有任何其他要求(除了必须存在的函数和 typedef)。如果您需要可移植性,则需要自行开发或从库中获取并专门使用它。
-
谢谢 - 我查看了 gcc 9 的
uniform_int_distribution标头,找不到任何关于它在那里保持状态的信息,并且重置实现为void reset() { }。我发现它不止一次调用 PRNG 的唯一一次是它是否必须进行放大或缩小 - 但我对那里的所有下划线感到头疼,所以我可能错过了一些东西。
标签: c++ random constants c++-standard-library