我<random>在我的应用程序中使用c ++ 11新标头,并且在不同方法的一个类中,我需要具有不同分布的不同随机数.我只是将一个随机引擎std::default_random_engine作为类成员将它放在类构造函数中,std::random_device并将其用于我的方法中的不同发行版.以这种方式使用随机引擎是可以的,或者我应该为我使用的每个分发声明不同的引擎.
没关系.
不共享发电机的原因:
随机序列的确定性:
如果您希望能够(用于测试/追踪错误)来控制生成的确切序列,那么通过隔离所使用的RNG可能会减少麻烦,特别是当并非所有RNG消耗都是确定性的时候.
在对不同的随机变量使用一个伪随机数生成器时应该小心,因为这样做时它们会变得相关。
这是一个示例:如果您想模拟二维(例如 x 和 y)的布朗运动,您需要两个维度的随机性。如果您从一个生成器 (noise()) 中获取随机数并连续分配它们
while(simulating)
x = x + noise()
y = y + noise()
Run Code Online (Sandbox Code Playgroud)
那么变量 x 和 y 就会相关,因为伪数生成器的算法只会说明它们的好坏,如果您采用生成的每个数字,而不是像本例中那样仅采用第二个数字。在这里,布朗粒子可能比负方向移动到正 x 和 y 方向的概率更高,从而引入人为漂移。
对于使用不同生成器的两个进一步原因,请查看sehe 的答案。