每个呼叫都会生成不同数字的函数:我应该通过引擎,分配还是两者兼而有之

A function that generates a different number at each call: should I pass the engine, the distribution or both?

本文关键字:引擎 我应该 分配 兼而有之 函数 呼叫 数字      更新时间:2023-10-16

我很难准确理解分布在给定随机引擎中的作用。假设我想编写一个函数f(/* Arguments */),该功能使用std::mt19937引擎和std::uniform_int_distribution<int>在每个调用处返回一个新的随机号码。我希望此功能是线程安全的。我的问题是:我应该通过参考此功能,引擎,发行或两者兼而有之?

有可能分布来缓存某些状态,从而减少对发动机的通话频率以获取熵。例如,盒子毛刺将两个样品从均匀分布中映射到正态分布的两个样本中。可以通过Box-Muller实现std::normal_distribution,以便每秒钟对发动机进行两个调用。

理想情况下,您可以存储一个引擎和分布的每线程 - 或更详细的,但肯定不少 - 并将lambda或 std::function<int()>传递给您的功能f,以将其与获取方式的详细信息隔离。