シミュレーションの都合上,質のいい乱数が必要になったので,ついにメルセンヌ・ツイスターを試すことに.
ちょっと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 の敷居を高くしているのかなーと勝手に妄想.