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

履歴 編集

type-alias
<random>

std::philox4x64(C++26)

namespace std {
  using philox4x64 = philox_engine<uint_fast64_t, 64, 4, 10, 0xD2E7470EE14C6C93, 0x9E3779B97F4A7C15, 0xCA5A826395121157, 0xBB67AE8584CAA73B>;
}

概要

パラメータ設定済みのphilox_engine
64ビット版のPhilox。32ビット版はphilox4x32

要件

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

乱数列の周期

4 * 24 * 64 = 2258

サイズ

64ビット * 10個

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

uint_fast64_t

備考

  • ここではラウンド数としてr = 10を設定している。この値を大きくすれば乱数の品質は向上し、統計的により良い分布になっていく。10という値は既知の統計検定に合格する最小値よりやや大きめであり、広く使用されている値である。言い換えれば、適度な性能コストで統計的な安全マージンを提供している
    • r = 7でも統計的な欠陥は見つかっていないが、実際にはr = 10だけが広く使われている

#include <iostream>
#include <random>

int main()
{
  std::random_device seed_gen;
  std::philox4x64 engine{seed_gen()};

  for (int i = 0; i < 10; ++i) {
    std::uint64_t result = engine();
    std::cout << result << std::endl;
  }
}

出力例

72062055105063631
539956941501865535
5904818425294243952
8001500457562741315
13252054522302466664
18049527239021749472
5492258834844344098
5802814489282269200
3731762092097568778
13599432073888768711

バージョン

言語

  • C++26

処理系