Skip to content

Latest commit

 

History

History
109 lines (80 loc) · 2.84 KB

mt19937.md

File metadata and controls

109 lines (80 loc) · 2.84 KB

mt19937

  • random[meta header]
  • std[meta namespace]
  • type-alias[meta id-type]
  • cpp11[meta cpp]
namespace std {
  using mt19937 = mersenne_twister_engine<
      uint_fast32_t,
      32, 624, 397, 31,
      0x9908b0df, 11, 0xffffffff, 7,
      0x9d2c5680, 15, 0xefc60000, 18, 1812433253
    >;
}
  • mersenne_twister_engine[link mersenne_twister_engine.md]
  • uint_fast32_t[link /reference/cstdint/uint_fast32_t.md]

概要

パラメータ設定済みのmersenne_twister_engine
32ビット版のメルセンヌ・ツイスター。64ビット版はmt19937_64

19937という名称は、メルセンヌ・ツイスター法によって生成される乱数列の周期から来ている(219937 - 1)。

要件

mt19937型オブジェクトをデフォルト構築した場合、10000番目に生成される擬似乱数の値は4123659995であること。

乱数列の周期

219937 - 1

サイズ

(624 + 1) * sizeof(uint_fast32_t)
  • uint_fast32_t[link /reference/cstdint/uint_fast32_t.md]

メルセンヌ・ツイスターのシフトサイズ(624) + 現在の状態(1)。

パフォーマンス

環境によって変動する可能性はあるが、minstd_randminstd_rand0より4倍ほど速い。

次元

623次元で一様分布する。

このトレードオフは、各出力の間(現在の状態と次の状態)の相関関係が、無視できるほどしかないということを意味する。たとえばN次元のランダムなベクトルを生成する場合、各次元の値に相関関係がほぼない状態にできる。

シード、および生成される値の型

uint_fast32_t

予測可能性

mt19937は、624個の連続した過去の出力履歴があれば、次に出現する値を予測できる。

参照 : Mersenne Twisterの次に出す値を推測する - 憂鬱な午後のひととき

#include <iostream>
#include <random>

int main()
{
  std::random_device seed_gen;
  std::mt19937 engine(seed_gen());

  for (int i = 0; i < 10; ++i) {
    std::uint32_t result = engine();
    std::cout << result << std::endl;
  }
}
  • std::mt19937[color ff0000]
  • std::random_device[link random_device.md]
  • seed_gen()[link random_device/op_call.md]
  • engine()[link mersenne_twister_engine/op_call.md]

出力例

187052875
1658563244
2429782613
1877839754
2940926841
869137381
1607700369
747874684
3520793428
1774920624

バージョン

言語

  • C++11

処理系