Namespaces
Variants

std:: uniform_real_distribution

From cppreference.net
定義先ヘッダ <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) (removed in C++20)
二つの分布オブジェクトを比較する
(関数)
擬似乱数分布に対するストリーム入出力を実行する
(関数テンプレート)

注記

この分布から閉区間 [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, ナント大学.