C++11標準ライブラリで追加された乱数生成エンジンでは、同一シード値を与えた場合には、処理系によらず同一の乱数列*1を生成する。ただしstd::default_random_engine
は処理系定義(implementation defined)であり、std::random_device
は非決定的な乱数列を生成しうるため、この2つは前述の限りではない。
<random>ヘッダで規定される定義済み乱数生成エンジンでは、各エンジンが生成する乱数列の10000番目の値を定めている。C++11(N3337) 26.5.5/p1より引用。
typedef linear_congruential_engine<uint_fast32_t, 16807, 0, 2147483647>
minstd_rand0;
Required behavior: The 10000th consecutive invocation of a default-constructed object of typeminstd_rand0
shall produce the value 1043618065.
なお、C/C++標準規格ではCライブラリrand()
関数の動作は規定しないため、srand()
関数で同一シード値を与えたとしても、異なるコンパイラ/ライブラリでは同一乱数列を生成する保証がない。ただし、「ある特定処理系の下で同一シード値を与えれば同一乱数列を生成すること」は保証される。*2
関連URL