読者です 読者をやめる 読者になる 読者になる

ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

boost.random使い方簡易まとめ

C++ boost Tips

この記事は

boost.randomの使い方の超カンタンなまとめです。使おうとする度に毎回毎回毎回毎回毎回毎回毎回毎回毎回毎回毎回毎回毎回お口チャックマン!
つまり使いやすいように自分でまとめるってことなんですね。

サンプルコード

やっぱりサンプルコードは大事ですね!

#include <boost/random.hpp>
#include <boost/random/random_device.hpp>

int main(){
    //乱数ジェネレータ
    boost::random::random_device RndDev;
    boost::random::mt19937 RndGen(RndDev());

    //分布
    boost::random::uniform_01<double> Uniform01;
    boost::random::uniform_real_distribution<double> Uniformf(0.0, 1.0);
    boost::random::uniform_int_distribution<int> Uniformi(0, std::numeric_limits<int>::max());
    boost::random::normal_distribution<double> Normal(0.0, 1.0);

    //こんな感じで使える
    double a = Uniform01(RndGen);
}
  • ジェネレータのアルゴリズムとか分布とかは他にも一杯有るのでドキュメントをチェック!
  • 基本的には分布にジェネレータを渡す
  • mt19937はメルセンヌ・ツイスタ法のジェネレータ
  • random_deviceは本物(?)の乱数を吐く(電源のノイズを元になんとかこんとか)が遅いらしい(未測定)
  • variate_generatorを使うとジェネレータと分布をパックしておける
  • 一様分布は整数用と浮動小数点用で別々になっている
  • 小さい整数用の一様分布というものもある
  • 浮動小数点は範囲が[floor,ceil)で整数は範囲が[floor,ceil]なことに注意
  • テンプレートパラメータとかコンストラクタの引数とかはほとんど省略できる
    • デフォルトパラメータについてはドキュメントを見てください