std::generate_canonical
来自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.0GCC #63176LLVM #18767MSVC STL #1074。此为 LWG 问题 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) | 产生在范围内均匀分布的实数 (类模板) |