C++11のrandomライブラリで1から10の乱数を生成する方法のメモ

    C++で乱数を利用する方法について調べてみた。

    やりたいこと

    1~10の間で、ランダムな数字を取得する

    実装方法

    C++には、長らく乱数生成はC言語に頼ってきた歴史があるようだが、C++11でようやくrandomライブラリが標準実装されたようだ。

    利用するためには、以下をインクルード。

    #include 

    覚えないと行けないことが2つある。

    • 乱数生成エンジン ・・・ 乱数を生成する。
    • 分布生成器 ・・・ 生成された乱数を分布に従わせる。一様分布、正規分布、ベルヌーイ分布、ポアソン分布、など。

    乱数生成エンジンは種類がたくさんあり、正直どれをつかえばいいのかわからないので、とりあえずコレ。

      // 予測不能な乱数生成器(class   
      std::random_device
      // メルセンヌツイスターの32ビット版(typedef)
      std::mt19937

    分布は一様分布を利用。これは、intとdoubleでつかうエンジンが異なる。

    `// 整数型 std::uniformintdistribution // 浮動小数点型 std::uniformrealdistribution

    追記`

    randomライブラリは実行速度がrandに比べて早くないことが判明!なので、srand,randを使った方法も追記。srandはループの外で宣言する必要がある。

    実装

    -std=gnu++0xをコンパイルオプションにつけることを忘れないように。

    こんな感じで、生成されました。

    5.28957
    8.79693
    5.23333
    1.76491
    3.95931
    5.52467
    8.1513
    6.85362
    1.68268
    9.75644