最終更新日時(UTC): 2025年10月22日 16時15分43秒
Akira Takahashi が更新

履歴 編集

class template
<random>

# std::bernoulli_distribution(C++11)

    namespace std {
      class bernoulli_distribution;
    }

## 概要

`bernoulli_distribution`は、`true`と`false`という2つの値を確率分布させるクラスである。
このクラスは、ベルヌーイ分布(Bernoulli distribution)の実装である。

コンストラクタで設定された確率`p`で`true`が生成され、確率`1.0 - p`で`false`が生成される。

ベルヌーイ分布は、以下のような用途に使用できる：

- コイントス。コインの表が出るか裏が出るか
- 成功か失敗か

## メンバ関数

### 構築・リセット

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

### 生成

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

### プロパティ

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

## メンバ型

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

## 非メンバ関数

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

## 例

    #include <random>
    #include <fstream>
    #include <cstdint>

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

      // 確率0.7でtrueを生成し、確率0.3(1.0 - 0.7)でfalseを生成する
      std::bernoulli_distribution dist(0.7);

      std::ofstream result_file("bernoulli_distribution.tsv");
      for (std::size_t n = 0; n < 1000; ++n) {
        // 乱数を生成する
        bool result = dist(engine);

        result_file << result << "\t\n";
      }
    }

### 出力

このプログラムによってある時に得られた結果（bernoulli_distribution.tsv）を図示する。

## バージョン

### 言語

- C++11

### 処理系

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

## 参照

- ベルヌーイ分布 - Wikipedia
- ベルヌーイ分布(Bernoulli distribution) - NtRand