namespace std {
using ranlux24 = discard_block_engine<ranlux24_base, 223, 23>;
}
概要
ranlux24
は、贅沢さレベル3のRANLUX(LUXury RANdom numbers)法エンジンである。
RANLUX法は、以下の特徴を持つ:
- 低速だが、高品質な乱数を生成する
- シードを系統的に選ぶ (例えばスレッド ID) と、特に初期において生成した値の間に線型の相関 (nearly affine dependence) がみられる。これを避けるには
random_device
等の非決定論的な乱数をシードとして使う- 最初の方の値を捨てる (少なくとも 2 × 23 = 46 個)
RANLUX法は、0から4までの贅沢さレベル(luxury level)が選択可能である。
レベルを高くするほど低速になるが、乱数の品質は高くなる。レベル4が最高品質となる。
標準では、レベル3のranlux24
および、レベル4のranlux48
が定義される。
モンテカルロ法によるシミュレーションに、よく使用される。
要件
ranlux24
型オブジェクトをデフォルト構築した場合、10000番目に生成される擬似乱数の値は9901578
であること。
乱数列の周期
10171
サイズ
24 * sizeof(uint_fast32_t)
パフォーマンス
minstd_rand
やminstd_rand0
に比べて、5倍ほど遅い。
シード、および生成される値の型
例
#include <iostream>
#include <random>
int main()
{
std::random_device seed_gen;
std::ranlux24 engine(seed_gen());
for (int i = 0; i < 10; ++i) {
std::uint32_t result = engine();
std::cout << result << std::endl;
}
}
xxxxxxxxxx
#include <iostream>
#include <random>
int main()
{
std::random_device seed_gen;
std::ranlux24 engine(seed_gen());
for (int i = 0; i < 10; ++i) {
std::uint32_t result = engine();
std::cout << result << std::endl;
}
}
出力例
14989051
4145629
9009933
15957878
252315
15191713
10652539
8111899
16296385
3893002
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.2 ✅
- ICC: ??
- Visual C++: 2010 ✅, 2012 ✅, 2013 ✅, 2015 ✅, 2017 ✅