如前所述,您可以通过用相同的种子多次播种来进行散播。
srand(1234); // magic number
// ....
srand(1234); // magic number again
的输出rand()
将从与以前相同的点重新启动。
当您使用它时,我建议不要在 rand() 上使用模运算符,因为它不会导致值的均匀分布。相反,您可以使用以下帮助程序获取整数范围内的随机值:
int randRange(int M, int N)
{
// see http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx
return M + rand() / ( RAND_MAX / ( N - M ) + 1 );
}
int nextrand = randRange(100,200);
有关更多背景信息,请参阅有关 Eternally Confuzzled(Julienne Walker 撰写)的链接文章,以及有关播种的信息。
C++ 选项
上面的缺点是生成完全是顺序的(你不能同时有两个随机生成器实例)。既然您使用 C++ 进行标记,我们为什么不使用它!
您可以使用 tr1 或 c++0x/c++11 1 uniform_int_distribution
:
#include <random>
#include <functional>
std::uniform_int_distribution<int> distribution(100, 200);
std::mt19937 engine; // Mersenne twister MT19937
int nextrand = distribution(engine);
一个直接的优势是您可以让多个引擎同时生成相同的序列(参见示例)。
如您所见,您可以engine(1234)
像使用srand
. 现场查看示例:
1 Boost.Random 如果你使用 C++03