最終更新日時(UTC):
が更新

履歴 編集

class template
<random>

std::mersenne_twister_engine(C++11)

namespace std {
  template <class UIntType, size_t w, size_t n, size_t m, size_t r,
            UIntType a, size_t u, UIntType d, size_t s,
            UIntType b, size_t t,
            UIntType c, size_t l, UIntType f>
  class mersenne_twister_engine;

  using mt19937    = ;
  using mt19937_64 = ;
}

概要

mersenne_twister_engineクラスは、メルセンヌ・ツイスター法による擬似乱数生成エンジンである。

メルセンヌ・ツイスター法は、以下のような特徴を持つ:

  1. 非常に長い周期を持つ。
  2. 非常に大きな次元で均等分布する。(n次元…パラメータ設定済み別名であるmt19937では623次元)
    • これは内部的に、大きな配列(領域)を保持することを意味する。空間的に余裕がある場合にこのエンジンを選択する。

テンプレートパラメータは、以下を意味する:

  • UIntType : 生成する符号なし整数の型。
  • w : ワードサイズ。状態シーケンス内での各ワードのビット数。numeric_limits<UIntType>::digits以下にするのがよい。
  • n : 状態のサイズ。状態シーケンスの要素数。生成される値が再発する程度を調整するための値。
  • m : シフトサイズ。各ひねり(twist)時にシーケンスから選択する他の値が、m要素離れるようにする。nより小さくするのがよい。
  • r : マスクのビットサイズ。各ひねりに対する分離ポイントのマスクサイズ。wよりも小さくするのがよい。
  • a : XORのマスク。各ひねりに対して、線形関数としてXORする値。1u << wよりも小さくするのがよい。
  • s, t, u, l : 調律シフトのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のシフト値。wよりも小さくするのがよい。
  • b, c, d : 調律ビットマスクのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のビットマスク値。1u << w以下にするのがよい。
  • f : 初期化の乗数。ひとつの値をシードとする際の、状態シーケンスのシードとして使用する初期化乗数。

これらは以下の関係式を満たなければならない:

  • 0 < m
  • m <= n
  • 2u < w
  • r <= w
  • u <= w
  • s <= w
  • t <= w
  • l <= w
  • w <=std::numeric_limits<UIntType>::digits
  • a <= (1u << w) - 1u
  • b <= (1u << w) - 1u
  • c <= (1u << w) - 1u
  • d <= (1u << w) - 1u
  • f <= (1u << w) - 1u

メンバ関数

構築・シード

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
~mersenne_twister_engine() = default; デストラクタ C++11
seed シードを設定する C++11

生成

名前 説明 対応バージョン
operator() 擬似乱数を生成する C++11
discard 指定した回数だけ擬似乱数を生成し、内部状態を進める C++11

静的メンバ関数

エンジンの特性

名前 説明 対応バージョン
min 生成し得る値の最小値を取得する C++11
max 生成し得る値の最大値を取得する C++11

メンバ型

説明 対応バージョン
result_type 擬似乱数生成結果の符号なし整数型 UIntType C++11

メンバ定数

定数 説明 対応バージョン
static constexpr size_t word_size ワードサイズ。状態シーケンス内での各ワードのビット数。テンプレートパラメータw C++11
static constexpr size_t state_size 状態のサイズ。状態シーケンスの要素数。生成される値が再発する程度を調整するための値。テンプレートパラメータn C++11
static constexpr size_t shift_size シフトサイズ。各ひねり(twist)時にシーケンスから選択する他の値が、m要素離れるようにする。テンプレートパラメータm C++11
static constexpr size_t mask_bits マスクのビットサイズ。各ひねりに対する分離ポイントのマスクサイズ。テンプレートパラメータr C++11
static constexpr UIntType xor_mask XORのマスク。各ひねりに対して、線形関数としてXORする値。テンプレートパラメータa C++11
static constexpr size_t tempering_u 調律シフトのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のシフト値。テンプレートパラメータu C++11
static constexpr UIntType tempering_d 調律ビットマスクのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のビットマスク値。テンプレートパラメータd C++11
static constexpr size_t tempering_s 調律シフトのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のシフト値。テンプレートパラメータs C++11
static constexpr UIntType tempering_b 調律ビットマスクのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のビットマスク値。テンプレートパラメータb C++11
static constexpr size_t tempering_t 調律シフトのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のシフト値。テンプレートパラメータt C++11
static constexpr UIntType tempering_c 調律ビットマスクのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のビットマスク値。テンプレートパラメータc C++11
static constexpr size_t tempering_l 調律シフトのパラメータ。生成アルゴリズムによって使用される、ごちゃ混ぜ処理のシフト値。テンプレートパラメータl C++11
static constexpr UIntType initialization_multiplier 初期化の乗数。ひとつの値をシードとする際の、状態シーケンスのシードとして使用する初期化乗数。テンプレートパラメータf C++11
static constexpr result_type default_seed デフォルトのシード値。5489u C++11

非メンバ関数

名前 説明 対応バージョン
operator== 等値比較 C++11
operator!= 非等値比較 C++11
operator<< ストリームへの出力 C++11
operator>> ストリームからの入力 C++11

#include <iostream>
#include <random>

int main()
{
  std::random_device seed_gen;

  // mersenne_twister_engineのパラメータ設定済み別名であるmt19937を使用する。
  // ランダムなシードを使用して初期化
  std::mt19937 engine(seed_gen());

  for (int i = 0; i < 10; ++i) {
    // 乱数を生成
    std::uint32_t result = engine();

    std::cout << result << std::endl;
  }
}

出力例

1947293914
2297418245
2457279642
1103462493
1989850974
803886008
4019141122
4235051204
208651936
1880689761

バージョン

言語

  • C++11

処理系

参照