最終更新日時: 2026年05月18日 13時21分35秒 (JST)
Akira Takahashi が更新

履歴 編集

class template
<random>

# std::negative_binomial_distribution(C++11)

    namespace std {
      template <class IntType = int>
      class negative_binomial_distribution;
    }

## 概要

`negative_binomial_distribution`は、離散確率分布の一種である、負の二項分布を表すクラスである。
二項分布(`binomial_distribution`)が「確率pで成功する事象をt回試行し、成功回数を取得する」のに対し、負の二項分布は「確率pで成功する事象がk回成功するまでに失敗した回数を取得する」ということを行う。

負の二項分布は、実装によって「k回成功するまでに試行した回数を取得する」ものと、「k回成功するまでに失敗した回数を取得する」もの、2つのバリエーションが存在する。`std::negative_binomial_distribution`クラスは後者である。

テンプレートパラメータは、以下を意味する：

- `IntType` : 成功／失敗回数を表す整数型。標準の符号付き／符号なし整数型 (`signed char`、`unsigned char`を含む) 、拡張整数型 (ビット幅が`char`以上`long long`以下) 、または処理系定義のサブセットの整数型でなければならない。

## メンバ関数

### 構築・リセット

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++11
`~negative_binomial_distribution() = default;` | デストラクタ | C++11
`reset` | 状態をリセットする | C++11

### 生成

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator()` | 乱数を生成する | C++11

### プロパティ

名前 | 説明 | 対応バージョン
--- | --- | ---
`k` | 目標とする成功回数を取得する | C++11
`p` | 確率を取得する | C++11
`param` | 分布のパラメータを取得／設定する | C++11
`min` | 生成し得る値の下限を取得する | C++11
`max` | 生成し得る値の上限を取得する | C++11

## メンバ型

型 | 説明 | 対応バージョン
--- | --- | ---
`result_type` | 乱数生成結果の整数型。`IntType` | C++11
`param_type` | 分布パラメータの型。未規定。 | C++11

## 非メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator==` | 等値比較 | C++11
`operator!=` | 非等値比較 | C++11
`operator<<` | ストリームへの出力 | C++11
`operator>>` | ストリームからの入力 | C++11

## 例

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

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

      // 成功確率0.5の事象を5回成功させる
      std::negative_binomial_distribution<> dist(5, 0.5);

      // 5回成功するまでに失敗した回数を取得
      int result = dist(engine);
      std::cout << result << std::endl;
    }

### 出力例

    3

## バージョン

### 言語

- C++11

### 処理系

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

## 参照

- 負の二項分布 - Wikipedia
- P4037R1 Supporting `signed char` and `unsigned char` in random number generation
  - `IntType`テンプレートパラメータに`signed char`／`unsigned char`を指定できるようになった。この仕様はC++26から導入されたが、仕様の欠陥を修正したものであるためコンパイラは早期に対応している場合がある