最終更新日時(UTC):
が更新

履歴 編集

class template
<random>

std::piecewise_constant_distribution(C++11)

namespace std {
  template <class RealType = double>
  class piecewise_constant_distribution;
}

概要

piecewise_constant_distributionは、区間ごとの重み付けを定数値とした分布を生成するクラスである。
このクラスはコンストラクタに、値の区間を表す数列と、区間ごとに線形に変化する重みの数列を設定する。重み数列の要素数は、区間数列の要素数 - 1個である。

パラメータを、区間 {0.0, 1.0, 2.0}、重み {0.3, 0.5}のように設定した場合、区間[0.0, 1.0)の値が出現する確率は0.3、区間[1.0, 2.0)の値が出現する確率は0.5となる。

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

  • RealType : 生成される実数の型。

メンバ関数

構築・リセット

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

生成

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

プロパティ

名前 説明 対応バージョン
intervals 区間の数列を取得する C++11
densities 重み付けの数列を取得する C++11
param 分布のパラメータを取得/設定する C++11
min 下限を取得する C++11
max 上限を取得する C++11

メンバ型

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

#include <fstream>
#include <random>
#include <array>

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

  // [0.0, 5.0)の値は、0.3の確率で出現する。
  // [5.0, 10.0)の値は、0.5の確率で出現する。
  std::array<double, 3> intervals = {0.0, 5.0, 10.0},
  std::array<double, 2> densities = {0.3, 0.5};

  std::piecewise_constant_distribution<> dist(
    intervals.begin(),
    intervals.end(),
    densities.begin()
  );

  std::ofstream file("piecewise_constant_distribution.tsv");
  for (int i = 0; i < 1000; ++i) {
    double result = dist(engine);
    file << result << "\n";
  }
}

出力

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

バージョン

言語

  • C++11

処理系