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