uniform_real_distribution
random[meta header]
std[meta namespace]
class template[meta id-type]
cpp11[meta cpp]
namespace std {
template <class RealType = double >
class uniform_real_distribution ;
}
uniform_real_distributionは、指定された範囲の値が等確率で発生するよう離散分布するクラスである。
このクラスは、離散一様分布(Discrete Uniform Distribution)の実数に特化したバージョンである。整数が必要な場合は、uniform_int_distribution クラスを使用する。
テンプレートパラメータは、以下を意味する:
uniform_real_distributionの実装は、内部的にstd::generate_canonical() を使用している環境がある
std::generate_canonical<std::numeric_limits<RealType>::digits>(rng) * (b - a) + aのようにして、指定された範囲[a, b)の値を生成する
C++23まではそのstd::generate_canonical()の仕様上、浮動小数点数の丸めにより指定範囲外の値(上限値b)が生成されることがあった
C++26ではstd::generate_canonical()に棄却法が導入されたことで、この問題は解消された
名前
説明
対応バージョン
(constructor)
コンストラクタ
C++11
~uniform_real_distribution() = default;
デストラクタ
C++11
reset
状態をリセットする
C++11
名前
説明
対応バージョン
a
生成し得る値の下限を取得する
C++11
b
生成し得る値の上限を取得する
C++11
param
分布のパラメータを取得/設定する
C++11
min
生成し得る値の下限を取得する
C++11
max
生成し得る値の上限を取得する
C++11
型
説明
対応バージョン
result_type
乱数生成結果の実数型 RealType。
C++11
param_type
分布パラメータの型。未規定。
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.0以上1.0未満の値を等確率で発生させる
std::uniform_real_distribution<> dist (0.0 , 1.0 );
std::ofstream result_file (" uniform_real_distribution.tsv" );
for (std::size_t n = 0 ; n < 1000 ; ++n) {
// 一様実数分布で乱数を生成する
double result = dist (engine);
result_file << result << " \t\n " ;
}
}
std::uniform_real_distribution[color ff0000]
std::ofstream[link /reference/fstream/basic_ofstream.md]
dist(engine)[link uniform_real_distribution/op_call.md]
このプログラムによってある時に得られた結果(uniform_real_distribution.tsv )を図示する。
1,000個程度のデータのため、ある程度は偏りがあるが、誤差の範囲でほぼ等確率で0.0から1.0までの値が生成されていることがわかる。