std:: uniform_real_distribution
|
定義先ヘッダ
<random>
|
||
|
template
<
class
RealType
=
double
>
class uniform_real_distribution ; |
(C++11以降) | |
区間 [a, b) で一様分布するランダムな浮動小数点値 x を生成します。すなわち、次の確率密度関数に従って分布します:
-
P(x|a,b) =
.1 b − a
std::uniform_real_distribution
は
RandomNumberDistribution
の全ての要件を満たします。
目次 |
テンプレートパラメータ
| RealType | - | ジェネレータによって生成される結果の型。これが float 、 double 、または long double のいずれでもない場合、動作は未定義です。 |
メンバー型
| メンバー型 | 定義 |
result_type
(C++11)
|
RealType |
param_type
(C++11)
|
パラメータセットの型、 RandomNumberDistribution を参照。 |
メンバー関数
|
(C++11)
|
新しい分布を構築する
(公開メンバ関数) |
|
(C++11)
|
分布の内部状態をリセットする
(公開メンバ関数) |
生成 |
|
|
(C++11)
|
分布内の次の乱数を生成する
(公開メンバ関数) |
特性 |
|
|
(C++11)
|
分布パラメータを返す
(公開メンバ関数) |
|
(C++11)
|
分布パラメータオブジェクトを取得または設定する
(公開メンバ関数) |
|
(C++11)
|
生成され得る最小値を返す
(公開メンバ関数) |
|
(C++11)
|
生成され得る最大値を返す
(公開メンバ関数) |
非メンバー関数
|
(C++11)
(C++11)
(removed in C++20)
|
二つの分布オブジェクトを比較する
(関数) |
|
(C++11)
|
擬似乱数分布に対するストリーム入出力を実行する
(関数テンプレート) |
注記
この分布から閉区間 [a, b] の分布を作成することは困難です。 std:: nextafter ( b, std:: numeric_limits < RealType > :: max ( ) ) を第2引数として使用する方法は、丸め誤差のため常に機能するとは限りません。
既存の実装のほとんどには、時折
b
を返す可能性があるバグが存在します
(
GCC #63176
LLVM #18767
MSVC STL #1074
)。当初は
RealType
が
float
であり、かつ
LWG issue 2524
が存在する場合にのみ発生すると考えられていましたが、その後
どちらの条件もバグを引き起こすために必須ではない
ことが示されています。
例
1から2の間のランダムな数値を10個出力します。
#include <iostream> #include <random> int main() { std::random_device rd; // Will be used to obtain a seed for the random number engine std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd() std::uniform_real_distribution<> dis(1.0, 2.0); for (int n = 0; n < 10; ++n) // Use dis to transform the random unsigned int generated by gen into a // double in [1, 2). Each call to dis(gen) generates a new random double. std::cout << dis(gen) << ' '; std::cout << '\n'; }
出力例:
1.80829 1.15391 1.18483 1.38969 1.36094 1.0648 1.97798 1.27984 1.68261 1.57326
外部リンク
| 区間からのランダム浮動小数点数の生成 — © 2022. Frédéric Goualard, ナント大学. |