C++11生成随机数的方法是:
我假设一条指导原则:引擎生成的可能数字数量应大于或等于您希望获得的不同随机数字的数量。不幸的是,由于在我的计算机上,
- 实例化一个随机数引擎
- 实例化一个随机分布
- 通过分布将随机数从引擎中推送出来
我假设一条指导原则:引擎生成的可能数字数量应大于或等于您希望获得的不同随机数字的数量。不幸的是,由于在我的计算机上,
uint_fast32_t
和uint_fast64_t
相同,因此每个C++11生成器的建议引擎都会产生相同的结果,无法测试我的假设。
关于 C++11 分布函数,如 std::uniform_real_distribution 或 std::uniform_int_distribution 的文档在这方面是不完整的:
本节不完整。 原因:生成器的要求
但例如 gcc 4.7
实现的 uniform_real_distribution
是:
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p)
{
__detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
__aurng(__urng);
return (__aurng() * (__p.b() - __p.a())) + __p.a();
}
适配器的位置:
适配器类,用于将任何生成器的输出转换为特定分布的输入。
"任何"听起来很令人放心,但它是否标准?我特别担心难以检测到的隐藏溢出,这可能会影响分布的正确性。