<random>
多数の乱数ジェネレーターを定義します。
#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 型のオブジェクトがスローされます。
[!メモ]
このメンバーは、TR1 との互換性のために保持されているエンジンにのみ含まれます。
result_type operator()() : min() と max() の範囲内で一様に分布した値を返します。
後続のエンジンの min、max、および result_type については詳しく説明しません。
Visual Studio 2010 からは、TR1 との互換性のために保持されているエンジンを除き、すべてのエンジンに次のメンバーも含まれます。
引数 result_type x0 を持つ明示的なコンストラクター。作成されるエンジンには、seed(x0) を呼び出した場合と同じようにシード値が設定されます。
引数 seed_seq& seq を持つ明示的なコンストラクター。作成されるエンジンには、seed(seq) を呼び出した場合と同じようにシード値が設定されます。
void seed(result_type x0): シード値 x0 をエンジンに設定するシード関数です。
void seed(seed_seq& seq): seq の値をシード値としてエンジンに設定するシード関数です。
void discard(unsigned long long count): operator() を count 回呼び出し、それぞれの値を破棄します。
すべてのエンジンには、後続の operator() への呼び出しで生成される値のシーケンスを決定する状態があります。同じ型の 2 つのオブジェクトの状態は、operator== および operator!= を使って比較できます。2 つの状態を比較した結果、等しければ、それらのオブジェクトからは、同じ値のシーケンスが生成されます。オブジェクトの状態は、そのオブジェクトの operator<< を使用することにより、符号なし 32 ビット値のシーケンスとしてストリームに保存できます。保存することによって状態が変化することはありません。保存された状態は、operator>> を使用することにより、同じ型のオブジェクトに読み込むことができます。
単体エンジンとは、乱数を直接生成するエンジンです。このライブラリには、オブジェクトが単体エンジンであるクラスが 1 つ用意されています。また、実装するアルゴリズムのパラメーターを提供する値でインスタンス化できるクラス テンプレートが 4 つ、さらに、これらのクラス テンプレートの定義済みのインスタンスが 9 つ用意されています。これらの型のオブジェクトも単体エンジンです。
複合エンジンは、1 つ以上の単体エンジンから乱数を取得し、それらの値を使って一様に分布した乱数のストリームを生成するエンジンです。このライブラリには、複合エンジンのクラス テンプレートが 2 つ用意されています。
分布の実体は、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 については詳しく説明しません。
Visual Studio 2010 からは、すべての分布に次のメンバーも含まれます。
typedef unspecified-type param_typeoperator() に戻り値を生成するパッケージのパラメーターが渡されます。
const param& コンストラクター: 格納されているパラメーター パッケージを、その引数から初期化します。
param_type param() const: 格納されているパラメーター パッケージを取得します。
void param(const param_type&): 格納されているパラメーター パッケージを、その引数から設定します。
template <class Engine> result_type operator()(Engine& eng, param_type par0): 一様に分布する乱数値のソースとして eng を使い、パラメーター パッケージ par0 を使用して、分布の定義に従って分布された値を返します。
パラメーター パッケージは、分布に必要なすべてのパラメーターを格納するオブジェクトです。これには、次のメンバーが含まれます。
typedef distribution-type distribution_typeその配布の種類です。
分布のコンストラクターと同じパラメーター リストを受け取る 1 つ以上のコンストラクター。
分布と同じパラメーター アクセス関数。
等値比較演算子と非等値比較演算子。
このライブラリは、チェック済みバージョンとしてビルドすることも、未チェック バージョンとしてビルドすることもできます。チェック済みバージョンは、C の assert マクロに似たマクロを使用して、関数の記述の中で Precondition としてマークされた条件をテストします。チェック済みバージョンを使用するには、このライブラリを使用するすべてのコードで、_RNG_CHECK マクロまたは _DEBUG マクロを 0 以外の数値に定義してください。
Classes
ベルヌイ分布を生成します。 |
|
二項分布を生成します。 |
|
コーシー分布を生成します。 |
|
カイ 2 乗分布を生成します。 |
|
ベースとなるエンジンから返された値を破棄することによってランダム シーケンスを生成します。TR1 との互換性のために保持されています。 |
|
ベースとなるエンジンから返された値を破棄することによってランダム シーケンスを生成します。 |
|
整数の離散分布を生成します。 |
|
指数分布を生成します。 |
|
極値分布を生成します。 |
|
フィッシャー分布を生成します。 |
|
ガンマ分布を生成します。 |
|
幾何分布を生成します。 |
|
ベースのエンジンから返された値のビットを再パックすることで、指定したビット数でランダム シーケンスを生成します。 |
|
線形合同法アルゴリズムでランダム シーケンスを生成します。TR1 との互換性のために保持されています。 |
|
線形合同法アルゴリズムでランダム シーケンスを生成します。 |
|
対数正規分布を生成します。 |
|
メルセンヌ ツイスタ アルゴリズムでランダム シーケンスを生成します。TR1 との互換性のために保持されています。 |
|
メルセンヌ ツイスタ アルゴリズムでランダム シーケンスを生成します。 |
|
負の二項分布を生成します。 |
|
正規分布を生成します。 |
|
区分定数分布を生成します。 |
|
区分線形分布を生成します。 |
|
ポワソン分布を生成します。 |
|
外部デバイスを使用してランダム シーケンスを生成します。 |
|
乱数エンジンにランダム化されたシードを提供できる符号なし整数値のベクターを格納します。 |
|
ベースのエンジンから返された値を並べ替えることで、ランダム シーケンスを生成します。 |
|
スチューデント T 分布を生成します。 |
|
キャリー付き減算アルゴリズムでランダム シーケンスを生成します。TR1 との互換性のために保持されています。 |
|
浮動小数点のキャリー付き減算アルゴリズムでランダム シーケンスを生成します。TR1 との互換性のために保持されています。 |
|
キャリー付き減算アルゴリズムでランダム シーケンスを生成します。 |
|
整数の一様分布を生成します。TR1 との互換性のために保持されています。 |
|
整数の一様分布を生成します。 |
|
浮動小数点の一様分布を生成します。TR1 との互換性のために保持されています。 |
|
浮動小数点の一様分布を生成します。 |
|
エンジンおよび分布をラップします。 |
|
ワイブル分布を生成します。 |
|
組み合わせ分布を生成します。 |
Typedef
既定のエンジンの型定義です。 |
|
順序シャッフル エンジンの型定義です。 |
|
線形合同法エンジンの型定義です。 |
|
線形合同法エンジンの型定義です。 |
|
メルセンヌ ツイスタ エンジンの型定義です。 |
|
メルセンヌ ツイスタ エンジンの型定義です。 |
|
浮動小数点のキャリー付き減算エンジンの型定義です。 |
|
キャリー付き減算エンジンの型定義です。 |
|
浮動小数点のキャリー付き減算エンジンの型定義です。 |
|
キャリー付き減算エンジンの型定義です。 |
|
浮動小数点のキャリー付き減算エンジンの型定義です。 |
|
ブロック破棄エンジンの型定義です。 |
|
キャリー付き減算エンジンの型定義です。 |
|
ブロック破棄エンジンの型定義です。 |
|
キャリー付き減算エンジンの型定義です。 |
|
浮動小数点のキャリー付き減算エンジンの型定義です。 |
演算子
演算子の左側のエンジンが右側のエンジンと等しいかどうかを調べます。 |
|
演算子の左側のエンジンが、右側のエンジンと等しくないかどうかを調べます。 |
|
ステータス情報をストリームに書き込みます。 |
|
ステータス情報をストリームから抽出します。 |
関数
ランダム シーケンスから浮動小数点値を返します。 |