std::generate_canonical
时遇到了问题。根据我在cpp-reference.com上的阅读,我期望 std::generate_canonical
生成的数字范围为 [0,1)。然而,在最新的 MSVC 2012(未安装 CTP)上,std::generate_canonical
生成的数字都是 10^28 的数量级(见下文)。事实上,Microsoft 的文档中没有提到 std::generate_canonical
生成数字的范围。这是 Microsoft 没有遵循标准吗?还是标准在描述
std::generate_canonical
的行为时存在缺陷?如果是后者,我应该如何编写代码以生成 [0,1) 范围内的随机浮点数?请参考下面的示例代码,这是我尝试使用
std::generate_canonical
的代码。#include <random>
#include <limits>
#include <iostream>
int main(int argc, char* argv[])
{
std::random_device rd;
// seed with true source of randomness
std::mt19937 _rng_generator(rd());
for(int n=0; n<10; ++n)
std::cout << std::generate_canonical<double,std::numeric_limits<double>::digits>(_rng_generator) << ' ';
return EXIT_SUCCESS;
}
我得到的输出示例:
4.85267e+028 2.76741e+028 3.17392e+028 5.84136e+028 1.0037e+028 4.87202e+028 2.53834e+028 4.233e+028 6.43922e+028 2.30694e+028
更新: 我之前已向Microsoft Connect报告了这个错误。该错误现已被修复,并将包含在MSVC 2014 RTM中。