2

如果我有这样的代码,请在 boost 的网站上使用这个基本的 boost 示例:

#include <boost/random/mersenne_twister.hpp>
#include <boost/random/variate_generator.hpp>
#include <boost/random/uniform_real.hpp>

boost::mt19937 gen;

int roll_die() {
    boost::uniform_real<> dist(1, 6);
    boost::variate_generator<boost::mt19937&, boost::uniform_real<> > die(gen, dist);
    return die();
}

如果我想做类似的事情

boost::uniform_real<> dist(0.0, 6.0) 

例如,它给了我类似 1.4883 的东西。有没有办法让它只给我 0.5 的值增量。

示例:(0.0, 6.0)

如果我运行代码 6 次,它会给我这样的结果:0.5、1.5、5.5、6.0、3.5、3.0

我将如何让它做到这一点?

谢谢。

4

1 回答 1

3

有两种方法可以做到这一点:

简单的方法是从两倍范围(封闭范围)中获取一个随机整数[0, 12]并除以 2.0。

更困难的方法是从扩大一半单位(开放范围(-0.25, 6.25))的范围(开放范围)中获取随机实数,然后四舍五入到最接近的 0.5。

后者更难,因为你会经常猜错范围,而且很难编写测试来确保你猜对了。(事实上​​,我并不是绝对肯定正确的范围是(-0.25, 6.25)而不是[-0.25, 6.25),至少对于 IEEE 浮点数......而且,如果这正确的范围,boost::random::uniform_real_distribution不给你任何方法来获得它......)

于 2012-11-07T19:48:44.740 回答