<random>
更新 : 2007 年 11 月
多数の乱数ジェネレータを定義します。
#include <random>
宣言
クラス |
説明 |
---|---|
ベルヌイ分布を生成します。 |
|
二項分布を生成します。 |
|
ランダム シーケンスの一部分を破棄します。 |
|
指数分布を生成します。 |
|
ガンマ分布を生成します。 |
|
幾何分布を生成します。 |
|
線形合同法アルゴリズムでランダム シーケンスを生成します。 |
|
メルセンヌ ツイスタ アルゴリズムでランダム シーケンスを生成します。 |
|
線形合同法エンジンの型定義です。 |
|
線形合同法エンジンの型定義です。 |
|
メルセンヌ ツイスタ エンジンの型定義です。 |
|
正規分布を生成します。 |
|
ポワソン分布を生成します。 |
|
外部デバイスを使用してランダム シーケンスを生成します。 |
|
浮動小数点のキャリー付き減算エンジンの型定義です。 |
|
キャリー付き減算エンジンの型定義です。 |
|
浮動小数点のキャリー付き減算エンジンの型定義です。 |
|
キャリー付き減算エンジンの型定義です。 |
|
浮動小数点のキャリー付き減算エンジンの型定義です。 |
|
浮動小数点のキャリー付き減算エンジンの型定義です。 |
|
キャリー付き減算アルゴリズムでランダム シーケンスを生成します。 |
|
浮動小数点のキャリー付き減算アルゴリズムでランダム シーケンスを生成します。 |
|
整数の一様分布を生成します。 |
|
浮動小数点の一様分布を生成します。 |
|
エンジンおよび分布をラップします。 |
|
組み合わせ分布を生成します。 |
解説
乱数ジェネレータは、一連の疑似乱数値を生成するオブジェクトです。特定の範囲内で一様に分布した値を生成するジェネレータをエンジンといいます。エンジンを分布の operator() に対する引数として渡すか、variate_generator クラス を使用して、エンジンと分布を組み合わせることで、その分布によって定義されている方法で分布された値を生成できます。
ほとんどの乱数ジェネレータは、ジェネレータをカスタマイズするためのパラメータで構成されるテンプレートです。引数として型を受け取るジェネレータでは、共通のテンプレート パラメータ名を使って、実引数の型として許可されている以下の型のプロパティが記述されます。
IntType: 符号付きまたは符号なし整数型
UIntType: 符号なし整数型
RealType: 浮動小数点型
エンジンの実体は TR1 のクラスまたはテンプレート クラスであり、そのインスタンスは、最小値と最大値の範囲内で一様に分布した乱数のソースとして機能します。エンジンには、単体エンジンと複合エンジンがあります。すべてのエンジンには、次のメンバが存在します。
typedef numeric-type result_type: ジェネレータの operator() から返される型です。
result_type min(): ジェネレータの operator() から返される最小値を返します。
result_type max(): ジェネレータの operator() から返される最大値を返します。result_type が整数型である場合は、実際に返される可能性のある最大の値になります。result_type が浮動小数点型である場合は、返される可能性のあるすべての値より大きい最小の値になります。
void seed() : このシード関数により、エンジンが既定のシード値で初期化されます。
template <class InIt> void seed(InIt& first, InIt last) : このシード関数は、[first, last) によって指し示される、範囲の上端は含まれないシーケンスから unsigned long 型の値を使ってエンジンにシードを与えます。このシーケンスに、エンジンを完全に初期化するのに十分な長さがない場合、値 last が first に格納されて、std::invalid_argument 型のオブジェクトがスローされます。
result_type operator()() : min() と max() の範囲内で一様に分布した値を返します。
後続の分布の min、max、および result_type については詳しく説明しません。
すべてのエンジンには、後続の operator() への呼び出しで生成される値のシーケンスを決定する状態があります。同じ型の 2 つのオブジェクトの状態は、operator== および operator!= を使って比較できます。2 つの状態を比較した結果、等しければ、それらのオブジェクトからは、同じ値のシーケンスが生成されます。オブジェクトの状態は、そのオブジェクトの operator<< を使用することにより、符号なし 32 ビット値のシーケンスとしてストリームに保存できます。保存することによって状態が変化することはありません。保存された状態は、operator>> を使用することにより、同じ型のオブジェクトに読み込むことができます。
分布の実体は、TR1 のクラスまたはテンプレート クラスであり、そのインスタンスは、エンジンから取得された一様分布の乱数ストリームを、特定の分布を持った乱数ストリームに変換します。すべての分布には、次のメンバが存在します。
typedef numeric-type input_type: operator() に渡されたエンジンが返す必要のある型です。
typedef numeric-type result_type: 分布の operator() から返される型です。
void reset(): 次回 operator() を呼び出したときに、その結果が、その前にエンジンから取得された値に左右されないようにするため、キャッシュされている値をすべて破棄します。
template <class Engine> result_type operator()(Engine& eng): 一様に分布した乱数値のソースとして eng を使用することにより、分布の定義に従って分布された値を返します。
後続の分布の input_type、result_type、および reset については詳しく説明しません。
単体エンジンとは、乱数を直接生成するエンジンです。このライブラリには、オブジェクトが単体エンジンであるクラスが 1 つ用意されています。また、実装するアルゴリズムのパラメータを提供する値でインスタンス化できるクラス テンプレートが 4 つ、さらに、これらのクラス テンプレートの定義済みのインスタンスが 9 つ用意されています。これらの型のオブジェクトも単体エンジンです。
複合エンジンは、1 つ以上の単体エンジンから乱数を取得し、それらの値を使って一様に分布した乱数のストリームを生成するエンジンです。このライブラリには、複合エンジンのクラス テンプレートが 2 つ用意されています。
このライブラリは、チェック済みバージョンとしてビルドすることも、未チェック バージョンとしてビルドすることもできます。チェック済みバージョンは、C の assert マクロに似たマクロを使用して、関数の記述の中で Precondition としてマークされた条件をテストします。チェック済みバージョンを使用するには、このライブラリを使用するすべてのコードで、_RNG_CHECK マクロまたは _DEBUG マクロを 0 以外の数値に定義してください。