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

履歴 編集

class template
<random>

# std::independent_bits_engine(C++11)

    namespace std {
      template <class Engine, size_t W, class UIntType>
      class independent_bits_engine;
    }

## 概要

`independent_bits_engine`クラスは、乱数生成エンジンが生成する乱数をラップし、生成結果のビット数を変更する生成器アダプタである。
32ビット整数を生成する`mt19937`をラップして、64ビット整数を生成させる、といったことができる。

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

- `W` : 生成させる整数のビット数
- `UIntType` : 生成させる符号なし整数型。標準もしくは拡張の符号なし整数型 (ビット幅が`short`以上`long long`以下) 、または処理系定義のサブセットの符号なし整数型でなければならない。

## 要件

`W > 0`かつ`W <= numeric_limits<UIntType>::digits`であること。

## メンバ関数

### 構築・シード

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++11
`~independent_bits_engine() = default;` | デストラクタ | C++11
`seed` | シードを設定する | C++11

### 生成

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator()` | 乱数を生成する | C++11
`discard` | 指定した回数だけ乱数を生成し、内部状態を進める | C++11

### エンジンの特性

名前 | 説明 | 対応バージョン
--- | --- | ---
`base` | 元となる乱数生成器を取得する | C++11

## 静的メンバ関数

### エンジンの特性

名前 | 説明 | 対応バージョン
--- | --- | ---
`min` | 生成し得る値の最小値を取得する | C++11
`max` | 生成し得る値の最大値を取得する | C++11

## メンバ型

型 | 説明 | 対応バージョン
--- | --- | ---
`result_type` | 乱数生成結果型 `UIntType`。 | C++11

## 非メンバ関数

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

## 例

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

    int main()
    {
      // 32ビット整数を生成するmt19937をラップし、
      // 64ビット整数を生成させる
      std::independent_bits_engine<std::mt19937, 64, std::uint64_t> engine;

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

### 出力

    15028999435905310454
    16708911996216745849
    2342493223442167775
    16848810653347327969
    11664969248402573611
    1799302827895858725
    5137385360522333466
    10088183424363624464
    17662883439475955428
    17799051847008967418

## バージョン

### 言語

- C++11

### 処理系

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

## 参照

- P4037R1 Supporting `signed char` and `unsigned char` in random number generation
  - `UIntType`テンプレートパラメータの要件が明文化された（拡張符号なし整数型および処理系定義のサブセットを許容）。この仕様はC++26から導入されたが、仕様の欠陥を修正したものであるためコンパイラは早期に対応している場合がある