Skip to content

Latest commit

 

History

History
80 lines (63 loc) · 2.26 KB

generate_canonical.md

File metadata and controls

80 lines (63 loc) · 2.26 KB

#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

###処理系

###参考

  • N3337 p.909 §26.5.7.2