Declaration
template < class Type, class Engine = mt19937 > class random;
Overview
random クラスは Type 型のランダムな値を生成するためのクラスです. コンストラクタの引数にランダムな値を生成するための Engine を指定して randam の初期化を行った後,() 演算子を用いて生成されるランダムな値を取得します.
Engine に指定するクラスは,以下のメソッドが定義されている必要があります.
class engine { public: template <typename ValueT> void operator()(ValueT& dest); };
尚,デフォルトではランダムな値を生成するための Engine として mt19937 を用いています. mt19937 は Mersenne Twister (MT) と呼ばれる乱数生成アルゴリズムを実装したものです. MT のアルゴリズム,および実装に関する詳細は, Mersenne Twister Home Page を参照して下さい.
Example
#include <iostream> #include "clx/random.h" #include "clx/format.h" int main(int argc, char* argv[]) { clx::random<unsigned int> rand1; printf("1000 outputs of clx::random<int>\n"); for (int i = 0; i < 1000; ++i) { std::cout << clx::format("%10u ") % rand1(); if (i % 5 == 4) std::cout << std::endl; } printf("1000 outputs of clx::random<double>\n"); clx::random<double> rand2; for (int i = 0; i < 1000; ++i) { std::cout << clx::format("%10.8f ") % rand2(); if (i % 5 == 4) std::cout << std::endl; } return 0; }
Result 1000 outputs of clx::random3499211612 581869302 3890346734 3586334585 545404204 4161255391 3922919429 949333985 2715962298 1323567403 418932835 2350294565 1196140740 809094426 2348838239 4264392720 4112460519 4279768804 4144164697 4156218106 676943009 3117454609 4168664243 4213834039 4111000746 ・・・(中略)・・・ 1000 outputs of clx::random 0.81472369 0.13547700 0.90579193 0.83500859 0.12698681 0.96886777 0.91337586 0.22103404 0.63235925 0.30816705 0.09754040 0.54722060 0.27849822 0.18838198 0.54688152 0.99288130 0.95750683 0.99646133 0.96488853 0.96769494 0.15761308 0.72583896 0.97059278 0.98110969 0.95716695 ・・・(以下略)・・・
Template Parameters
- Type
- 生成するランダムな値の型を指定します.
- Engine
- ランダムな値を生成するためのアルゴリズムを指定します. デフォルト値は,mt19937.
Related Types
typedef Type value_type; typedef Engine engine_type;
Construction and Member Functions
explicit random(engine_type e = engine_type()); virtual ~random(); value_type operator()();
random は,() 演算子が呼ばれるたびに新たなランダムな値を返します.
engine_type& engine(); const engine_type& engine() const;