【发布时间】:2013-08-19 12:04:53
【问题描述】:
我正在寻找一种在 C++ 中快速生成两个随机数的方法。该代码用于骰子,滚动时需要生成一个随机数。我的代码目前如下所示:
Die::Die() {
srand(time(NULL));
}
void Die::roll() {
value = rand() % 6 + 1;
}
如果我使用此代码创建两个对象,srand() 作为一个静态(非基于实例)函数,将为所有对象生成一个新种子。我也试过这样做:
void Die::roll() {
srand(time(NULL));
value = rand() % 6 + 1;
}
而不是将它放在构造函数中,但如果我像下面这样快速调用它们:
die0->roll();
die1->roll();
它们的值通常相等。有什么方法可以让这个随机的,每次?感谢你的帮助。 :)
【问题讨论】:
-
您只需为随机数生成器播种一次。您可以通过将调用
srand(time(NULL))移动到初始化您的应用程序的代码轻松地做到这一点 -
@simonc 事实上,他应该只播种一次。就像现在一样,如果快速连续调用多次,它将一遍又一遍地以相同的值重新播种。
-
您可能想查看new PRNG functionality of C++11,尤其是
std::uniform_int_distribution类和该链接中的示例。 -
@JoachimPileborg 是的,它还避免了模偏差。