如何使用c ++生成不相关的随机序列

bao*_*ozi 2 c++ random math

我想生成两个不相关的正态分布随机数X 1,X 2的序列.

由于正态分布随机数来自统一数,我只需要两个不相关的统一序列.但是如何使用:

srand (time(NULL));
Run Code Online (Sandbox Code Playgroud)

我想我需要种子两次或做类似的事情?

Kon*_*lph 6

由于高质量随机数生成器生成的随机数是统一且独立的,因此您可以根据需要从中生成任意数量的独立序列.

你不需要,也不应该播种两个不同的发电机.

在C++(11)中,您应该使用标头中<random>伪随机数生成器.这是一个可以作为实际实现模板的最小示例:

std::random_device seed;
std::mt19937 gen{seed()};

std::normal_distribution<> dist1{mean1, sd1};
std::normal_distribution<> dist2{mean2, sd2};
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过调用dist1(gen)和生成独立的数字序列dist2(gen).将random_device被用于接种实际发电机,这在我的代码是一个Mersenne扭曲发生器.这种类型的发电机效率高,具有良好的统计特性.它应被视为(非加密安全)生成器的默认选择.

  • 如果您需要使用随机数字,必看视频:http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful (2认同)