如果我有这样的代码,请在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
我如何才能做到这一点?
感谢。
答案 0 :(得分:3)
有两种方法可以做到这一点:
简单的方法是从范围的两倍(闭合范围[0, 12]
)获得一个随机整数并除以2.0。
更难的方法是从范围延长一半的单位(开放范围(-0.25, 6.25)
)获得随机实数,并舍入到最接近的0.5。
后者更难,因为你会经常猜测范围错误,并且很难编写测试以确保你做对了。 (事实上,我并不是绝对肯定正确的范围是(-0.25, 6.25)
而不是[-0.25, 6.25)
,至少对于IEEE浮点数而言......并且,如果是正确的范围,{ {1}}没有给你任何方法来获得它...)