CLX C++ Libraries
Home >> random

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

example_random.cpp

#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::random
3499211612  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;

Reference

  1. Mersenne Twister Home Page