boost/random.hpp

シミュレーションの都合上,質のいい乱数が必要になったので,ついにメルセンヌ・ツイスターを試すことに.

ちょっとgoogleした結果,boost の実装が一番応用が利きそうな感じ.というわけで,初めてのboost!!

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

using namespace std;
using namespace boost;

int main()
{
     // Engine と Distribution を生成     
     mt19937 gen( static_cast<unsigned long>(time(0)) );
     uniform_int<> dst(0,100);

     // 乱数生成器のオブジェクト rand を生成
     variate_generator< mt19937, uniform_int<> >  rand(gen, dst);

     // 乱数の取り出しは operator() を使う.
     for (int i=0; i<100; i++)
	  cout << rand() << endl;

     return 0; 
}

良く出来ている.正規分布とか一様分布とかすぐに切り替えられるので,これはかなり便利そう.

ちなみにboost は 1.31.0 を使ったのだけど,gcc-3.4系ではまだ十分テストされていないみたい.コンパイル出来るようにするには,

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

と,まず cmath を include して上げる必要があった.こういう所が,boost の敷居を高くしているのかなーと勝手に妄想.