• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    type-alias
    <random>

    std::ranlux48

    namespace std {
      using ranlux48 = discard_block_engine<ranlux48_base, 389, 11>;
    }
    

    概要

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

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

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

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

    要件

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

    乱数列の周期

    10171

    サイズ

    12 * sizeof(uint_fast64_t)
    

    パフォーマンス

    ranlux24に比べて、40%ほど遅い。

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

    uint_fast64_t

    #include <iostream>
    #include <random>
    
    int main()
    {
      std::random_device seed_gen;
      std::ranlux48 engine(seed_gen());
    
      for (int i = 0; i < 10; ++i) {
        std::uint64_t result = engine();
        std::cout << result << std::endl;
      }
    }
    

    出力例

    150487143042812
    271824176483188
    144262504480630
    41969914011396
    182011784013906
    108124382624549
    17607643147140
    165775445584215
    85439168429936
    199504771218332
    

    バージョン

    言語

    • C++11

    処理系

    参照