2013-05-16 80 views
1

我想写一个函数,它需要一个min和一个max,并且在它们之间返回一个随机数。我试图使用Boost :: variate_generator来获得两个双打之间的随机数,但问题是我无法更改它的分布,所以我必须在每次调用时创建一个新的种子。如果我每次调用它时创建一个新的种子,它就会破坏伪随机数生成器的目的。如何重置Boost :: variate_generator分配?

有没有办法让下面这样的东西,Boost是没有必要的,它似乎只是给出了很好的结果。

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

回答

0

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

我偏好缺省参数,并将全局可用对象作为默认参数。它通常是线程安全的,只要生成器是线程安全的,并且您在初始化任何线程之前都已创建。

+0

这是如何解决需要改变发生器最小和最大值的问题? – user947871

+0

我并不是很熟悉boost generator,但是如果你有发生器生成一个[0,1]制服,你可以将它扩展到你想要的任何范围。 – frankc