【发布时间】:2010-02-03 06:20:17
【问题描述】:
我有以下代码:
Class B {
void generator()
{
// creating random number generator
boost::mt19937 randgen(static_cast<unsigned int>(std::time(0)));
boost::normal_distribution<float> noise(0,1);
boost::variate_generator<boost::mt19937,
boost::normal_distribution<float> > nD(randgen, noise);
for (int i = 0; i < 100; i++)
{
value = nD();
// graph each value
}
}
};
Class A {
void someFunction()
{
for(int i = 1; i <=3; i++)
{
std::shared_ptr<B> b;
b.reset(new B());
b->generator();
}
}
};
我希望快速连续多次执行上述代码以生成多个图形。我还查看了thisstackoverflow 问题,该问题类似,但需要注意的是,当使用 time(0) 并且快速连续调用成员函数时,您仍然可能会得到相同的数字序列。
我该如何克服这个问题?
编辑:我尝试在 B 类中将 randgen 设为静态,也尝试在 A 类中将其设为全局变量,但每次 3 个图表仍然相同。我也尝试过从 GetSystemTime 毫秒播种。我一定是错过了什么。
【问题讨论】:
-
如果您有充分的理由使用 mt19937 而不是简单地使用 rand(),那么也可能有充分的理由获得一个像样的种子。有提供真正随机数据的 Web 服务以及您可以购买的硬件。您可以将它们用作种子(定期),并使用 PRNG 来节省重新种子之间的时间/延迟。 en.wikipedia.org/wiki/…
-
我一定遗漏了一些东西 - 编辑问题以提供更大的图景。