#generate_canonical
namespace std {
template<class RealType, size_t bits, class URNG>
RealType generate_canonical(URNG& g);
}
##概要
実数区間[0.0-1.0)に展開(事実上正規化)された一様分布乱数を得る為のテンプレート関数。
テンプレート引数に与える RealType
について、 bits
だけの分解能を持つ仮数部を URNG g
を必要な回数だけ繰り返し呼び出して生成する。
##テンプレートパラメータ
class RealType
: 生成する実数の型。size_t bits
: 生成する実数における仮数部への分解能の最低要求。最大値はstd::
numeric_limits
<RealType>::
digits
。class URNG
: 一様分布擬似乱数生成器の型。
##関数パラメータ
- URNG& g : 一様分布擬似乱数生成器。
##例外
URNG g
が例外を送出する場合はそれに準ずる。
##例
#include <random>
#include <iostream>
int main()
{
std::default_random_engine g(123456789);
for(auto n = 3; n; --n)
std::cout
<< "g directly: "
<< g()
<< std::endl
;
for(auto n = 3; n; --n)
std::cout
<< "generate_canonical<float, std::numeric_limits<float>::digits>"
" [std::numeric_limits<float>::digits = "
<< std::numeric_limits<float>::digits
<< "] "
<< std::generate_canonical<float, std::numeric_limits<float>::digits>(g)
<< std::endl
;
}
###出力
g directly: 469049721
g directly: 2053676357
g directly: 1781357515
generate_canonical<float, std::numeric_limits<float>::digits> [std::numeric_limits<float>::digits = 24] 0.561695
generate_canonical<float, std::numeric_limits<float>::digits> [std::numeric_limits<float>::digits = 24] 0.415307
generate_canonical<float, std::numeric_limits<float>::digits> [std::numeric_limits<float>::digits = 24] 0.0661187
##バージョン ###言語
- C++11
###処理系
- Clang:
- GCC:
- GCC, C++0x mode:
- ICC:
- Visual C++:
###参考
- N3337 p.909 §26.5.7.2