Boost.Random 分布クラスの範囲の違い

Boost.Randomで一般的によく使うであろう分布クラス、uniform_int_distributionとuniform_real_distributionですが、これらのクラスがとる範囲の違いを調べる機会があったので、ここに書いておきます。


一様整数分布を行うuniform_int_distributionクラスは、[min, max]、つまりmin以上max以下というminとmax両方の値が起こりえます。

#include <iostream>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_int_distribution.hpp>

int main ()
{
    boost::random::mt19937 gen;
    boost::random::uniform_int_distribution<> dist(0, 3);

    for (int i = 0; i < 10; ++i) {
        std::cout << dist(gen) << std::endl;
    }
}
3
0
3
3
0
3
3
0
2
1

一様実数分布を行うuniform_real_distributionクラスは、[min, max)、つまりmin以上max未満というminは含むけどmaxは含まない範囲の値が生成されます。

#include <iostream>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_real_distribution.hpp>

int main ()
{
    boost::random::mt19937 gen;
    boost::random::uniform_real_distribution<> dist(0.0, 0.1);

    for (int i = 0; i < 10; ++i) {
        std::cout << dist(gen) << std::endl;
    }
}
0.0814724
0.0135477
0.0905792
0.0835009
0.0126987
0.0968868
0.0913376
0.0221034
0.0632359
0.0308167

(0が出なかった・・・)


参照:
Distributions - Boost Random Library