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