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

履歴 編集

function template
<random>

# std::uniform_real_distribution::operator()(C++11)

    template <class URBG>
    result_type operator()(URBG& g);                         // (1)

    template <class URBG>
    result_type operator()(URBG& g, const param_type& parm); // (2)

## 概要

- (1) : コンストラクタで指定されたパラメータに基いて、乱数生成を行う
- (2) : コンストラクタで設定されたパラメータの代わりに、`param`を乱数生成のパラメータとして使用して乱数生成を行う

## 戻り値

指定された値の範囲に基いて、等確率でランダムな値を生成して返す。
値の範囲は `a <= i < b` である。つまり、範囲の最小値を含み、最大値を含まない。

## 計算量

償却定数時間(`g()`の呼び出し回数)

## 例

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

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

      // (1)
      {
        std::uniform_real_distribution<> dist(0.0, 1.0);

        for (int i = 0; i < 5; ++i) {
          double result = dist(engine);
          std::cout << result << std::endl;
        }
      }

      // (2) パラメータを渡すバージョン
      std::cout << std::endl;
      {
        using dist_type = std::uniform_real_distribution<>;
        dist_type dist;

        for (int i = 0; i < 5; ++i) {
          dist_type::param_type param(0.0, 1.0);
          double result = dist(engine, param);
          std::cout << result << std::endl;
        }
      }
    }

### 出力例

    0.254291
    0.567725
    0.240681
    0.164293
    0.227867

    0.576028
    0.549507
    0.901166
    0.716245
    0.272544

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.2 ✅
- ICC: ??
- Visual C++: ??

## 参照

- P0346R1 A `<random>` Nomenclature Tweak
  - URNGをURBGに変更