随机数分布 c++11

Posted

技术标签:

【中文标题】随机数分布 c++11【英文标题】:Random number distributions c++11 【发布时间】:2013-05-15 19:14:04 【问题描述】:

我有一个使用多个分发对象的程序:

喜欢:

std::normal_distribution std::exponential_distribution

等等。

我应该为每个使用一个随机数引擎,还是应该让它们都共享同一个生成器?

【问题讨论】:

【参考方案1】:

通常您希望分布的每个实例都表示一个不相关的随机变量,这意味着您应该为每个实例配备一个新引擎。如果您的随机变量是相关的,您应该自己引入相关性而不是重用随机引擎,这样您就可以确保它被正确建模。

有时,您可以通过只播种一个(并且仅用于此)随机引擎并使用它来播种其他随机引擎来作弊。

如果您不关心确保随机变量不相关(例如,您没有做任何科学工作,而是编写游戏),您可以忽略这一点,因为这通常无关紧要。

【讨论】:

如果单个引擎产生的每个输出都与该引擎之前的输出不相关,那么使用单个引擎不应该没问题吗? @bernie 如果是,那么是的。但是,如果您使用的是 PRNG,而不是真正的随机数源,则根据定义,您的输出是相关的 - 可能非常非常难以弄清楚这一点。对于非加密引擎,这通常没有那么难。【参考方案2】:

当然,通常的答案是视情况而定。

如果您正在尝试进行模拟工作并且会提取大量随机数,那么最好为每个使用不同的引擎。否则,没关系。

【讨论】:

【参考方案3】:

没有理由使用多个引擎。如果您要绘制大量随机数并且您认为结果似乎相关,请将引擎更改为具有更大循环长度的引擎。

【讨论】:

以上是关于随机数分布 c++11的主要内容,如果未能解决你的问题,请参考以下文章

为啥 c++11 随机分布是可变的?

在c ++ 11中使用一个随机引擎进行多分布

随机数生成器的 C++11 线程安全

三角分布的随机样本:R

生成 2^30 的随机数

高手进,c语言中如何得到服从正态分布的随机数?