【问题标题】:How can I get random numbers by 0.5 increment with boost?如何通过 boost 获得 0.5 增量的随机数?
【发布时间】:2012-11-07 19:47:24
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 生成 0..12 范围内的值,然后除以 2。

标签: c++ boost random


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多