如何通过提升获得0.5增量的随机数?

时间:2012-11-07 19:47:24

标签: c++ boost random

如果我有这样的代码,请在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

我如何才能做到这一点?

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

更难的方法是从范围延长一半的单位(开放范围(-0.25, 6.25))获得随机实数,并舍入到最接近的0.5。

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