std:: generate_canonical
|
定義先ヘッダ
<random>
|
||
|
template
<
class
RealType,
std::
size_t
Bits,
class
Generator
>
RealType generate_canonical ( Generator & g ) ; |
(C++11以降) | |
範囲
[
0
,
1
)
内のランダムな浮動小数点数を生成します。
十分なエントロピーを生成するために、 generate_canonical ( ) は g ( ) を正確に k 回呼び出します。ここで k = max(1, ⌈ b / log 2 R ⌉) です。
- b = std:: min ( Bits, std:: size_t { std:: numeric_limits < RealType > :: digits } ) ,
- R = g. max ( ) - g. min ( ) + 1 .
目次 |
パラメータ
| g | - | エントロピー取得に使用するジェネレータ |
戻り値
範囲内の浮動小数点値
[
0
,
1
)
。
例外
g からスローされるものを除き、例外は発生しません。
注記
既存の実装には、
RealType
が
float
の場合に、時折
1.0
を返す可能性があるバグが存在します
GCC #63176
LLVM #18767
MSVC STL #1074
。これは
LWG issue 2524
として知られています。
例
10ビットのランダム性を持つ乱数を生成:これは k * R 個の異なる値のみを生成する可能性があります。
#include <iostream> #include <random> int main() { std::random_device rd; std::mt19937 gen(rd()); for (int n = 0; n < 10; ++n) std::cout << std::generate_canonical<double, 10>(gen) << ' '; std::cout << '\n'; }
出力例:
0.208143 0.824147 0.0278604 0.343183 0.0173263 0.864057 0.647037 0.539467 0.0583497 0.609219
関連項目
|
(C++11)
|
範囲内で均一に分布する実数値を生成する
(クラステンプレート) |