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

履歴 編集

class template
<random>

std::piecewise_linear_distribution(C++11)

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

概要

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

パラメータを、区間 {0.0, 1.0, 2.0}、重み {0.0, 0.5, 0.0}のように設定した場合、区間[0.0, 1.0)の値が出現する確率は、重み数列によって[0.0, 0.5)に線形に上昇する。区間[1.0, 2.0)の値が出現する確率は、重み数列によって[0.5, 0.0)に線形に減少する。

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

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

メンバ関数

構築・リセット

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
~piecewise_linear_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.0から0.5まで線形に上昇する。
  // [5.0, 10.0)の値は、出現確率が0.5から0.1まで線形に減少する。
  std::array<double, 3>
    intervals = {0.0, 5.0, 10.0},
    densities = {0.0, 0.5,  0.1};

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

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

出力

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

バージョン

言語

  • C++11

処理系