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

履歴 編集

type-alias
<random>

std::ranlux24(C++11)

namespace std {
  using ranlux24 = discard_block_engine<ranlux24_base, 223, 23>;
}

概要

ranlux24は、贅沢さレベル3のRANLUX(LUXury RANdom numbers)法エンジンである。
RANLUX法は、以下の特徴を持つ:

  • 低速だが、高品質な乱数を生成する
  • シードを系統的に選ぶ (例えばスレッド ID) と、特に初期において生成した値の間に線型の相関 (nearly affine dependence) がみられる。これを避けるには

RANLUX法は、0から4までの贅沢さレベル(luxury level)が選択可能である。
レベルを高くするほど低速になるが、乱数の品質は高くなる。レベル4が最高品質となる。
標準では、レベル3のranlux24および、レベル4のranlux48が定義される。

モンテカルロ法によるシミュレーションに、よく使用される。

要件

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

乱数列の周期

10171

サイズ

24 * sizeof(uint_fast32_t)

パフォーマンス

minstd_randminstd_rand0に比べて、5倍ほど遅い。

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

uint_fast32_t

#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

処理系

参照