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

やりたいこと

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

実装方法

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

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

#include 

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

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

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

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

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

`// 整数型 std::uniform_int_distribution // 浮動小数点型 std::uniform_real_distribution

追記`

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