std::generate_canonical
From cppreference.com
| ヘッダー <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 / log2 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) |
範囲内で一様に分布する実数値を生成する (クラステンプレート) |