最終更新日時: 2025年10月23日 01時15分43秒 (JST)
Akira Takahashi が更新

履歴 編集

type-alias
<random>

# std::philox4x32(C++26)

    namespace std {
      using philox4x32 = philox_engine<uint_fast32_t, 32, 4, 10, 0xD2511F53, 0x9E3779B9, 0xCD9E8D57, 0xBB67AE85>;
    }

## 概要

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

## 要件

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

## 乱数列の周期

4 * 24 * 32 = 2130

## サイズ

32ビット * 10個

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

`uint_fast32_t`

## 備考

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

## 例

    #include <iostream>
    #include <random>
    #include <cstdint>

    int main()
    {
      std::random_device seed_gen;
      std::uint32_t seed = seed_gen();
      std::philox4x32 engine{seed};

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

### 出力例

    717409690
    3816001420
    2063273750
    279442752
    2836561695
    431684143
    3973522490
    2090827657
    748889484
    859307553

## バージョン

### 言語

- C++26

### 処理系

- Clang: 19 ❌
- GCC: 14 ❌
- ICC: ??
- Visual C++: ??