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

AMC*_*ded 8 c++ random c++11

<random>在我的应用程序中使用c ++ 11新标头,并且在不同方法的一个类中,我需要具有不同分布的不同随机数.我只是将一个随机引擎std::default_random_engine作为类成员将它放在类构造函数中,std::random_device并将其用于我的方法中的不同发行版.以这种方式使用随机引擎是可以的,或者我应该为我使用的每个分发声明不同的引擎.

seh*_*ehe 5

没关系.

不共享发电机的原因:

  • 线程化(标准RNG实现不是线程安全的)
  • 随机序列的确定性:

    如果您希望能够(用于测试/追踪错误)来控制生成的确切序列,那么通过隔离所使用的RNG可能会减少麻烦,特别是当并非所有RNG消耗都是确定性的时候.


Mos*_*teM 5

在对不同的随机变量使用一个伪随机数生成器时应该小心,因为这样做时它们会变得相关。

这是一个示例:如果您想模拟二维(例如 x 和 y)的布朗运动,您需要两个维度的随机性。如果您从一个生成器 (noise()) 中获取随机数并连续分配它们

while(simulating)
    x = x + noise()
    y = y + noise()
Run Code Online (Sandbox Code Playgroud)

那么变量 x 和 y 就会相关,因为伪数生成器的算法只会说明它们的好坏,如果您采用生成的每个数字,而不是像本例中那样仅采用第二个数字。在这里,布朗粒子可能比负方向移动到正 x 和 y 方向的概率更高,从而引入人为漂移。

对于使用不同生成器的两个进一步原因,请查看sehe 的答案。