【问题标题】:How to reset Boost::variate_generator distribution?如何重置 Boost::variate_generator 分布?
【发布时间】:2013-05-16 18:07:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ random boost-random


    【解决方案1】:

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

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

    【讨论】:

    • 这如何解决需要更改生成器的最小值和最大值的问题?
    • 我对 boost 生成器不是特别熟悉,但是如果你让生成器生成 [0,1] 制服,你可以将它缩放到你想要的任何范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多