2

次のようなコードがある場合、ブーストのウェブサイトでこの基本的なブーストの例を使用します。

#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

これを行うには、次の 2 つの方法があります。

簡単な方法は、2 倍の範囲 (閉じた範囲[0, 12]) からランダムな整数を取得し、2.0 で割ることです。

より難しい方法は、単位の半分だけ拡張された範囲 (オープン範囲(-0.25, 6.25)) からランダムな実数を取得し、最も近い 0.5 に丸めることです。

後者は、かなり頻繁に範囲を間違って推測することになり、正しいことを確認するためのテストを作成するのが難しいため、より困難です。(実際、少なくともIEEE浮動小数点数の場合、適切な範囲が(-0.25, 6.25)ではなく であることに絶対的な自信があるわけではありません...そして、それ適切な範囲である場合、それを取得する方法はありません...)[-0.25, 6.25)boost::random::uniform_real_distribution

于 2012-11-07T19:48:44.740 に答える