1

我正在尝试编写一个函数,该函数接受一个最小值和一个最大值,并在它们之间返回一个随机双精度值。我试图使用 Boost::variate_generator 来获得两个双精度之间的随机数,但问题是我无法更改它的分布,所以我必须在每次调用时创建一个新种子。如果我每次调用它时都创建一个新种子,它就违背了伪随机数生成器的目的。

有没有办法在下面得到这样的东西,Boost 不是必需的,它似乎给出了很好的结果。

double getRandom(double min, double max);
{
    return randomNumberBetweenMinAndMax;
}
4

1 回答 1

0

有很多方法可以做到这一点。您可以有一个带有默认参数的参数,该参数默认为某个全局可用的对象。您可以有一个本地范围的静态变量来存储生成器。您可以有一个存储生成器的文件范围静态变量(如果它在一个类中,则类似于类静态)。你可以有一个函数获取的单例生成器。

我偏爱使用全局可用对象作为默认值的默认参数。只要生成器是线程安全的并且您在创建任何线程之前进行初始化,它通常是线程安全的。

于 2013-05-16T19:10:45.690 回答