我在尝试使用时遇到了一个问题std::generate_canonical.从我在cpp-reference.com上的阅读中,我希望std::generate_canonical生成[0,1]范围内的数字.但是,在最新的MSVC 2012(未安装CTP)上,std::generate_canonical生成的数字均为10 ^ 28(见下文).实际上,微软的文档没有提到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;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出示例:
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中.
我是sourceforge上FreeGLUT项目的当前维护者之一.这段代码存储在SVN仓库中,但为了激发其他人的贡献,我想提供一个git repo.我已经在github上有一个svn trunk的git-svn克隆目前在github上(通过SmartGit制作,实际上与git-svn并不真正兼容).
我通过克隆来做到这一点https://svn.code.sf.net/p/freeglut/code/trunk/freeglut.但是,我现在发现我应该克隆https://svn.code.sf.net/p/freeglut/code并让SmartGit的svn网桥弄清楚树枝和树干.
我在本地创建了这个新的正确克隆.现在的问题是:我已经在我的本地git repo中提交了一些旧的/错误的克隆提交.我想将这些转移到我的新仓库,但由于磁盘上的根目录不一样,这里概述的简单的rebase策略不起作用(我认为).
我可以用补丁来做,因为在补丁文件中为路径添加前缀git apply的--directory参数可以使事情有效,但是我必须通过提交来进行提交.至少,我还没有找到一种方法将多个提交放在一个补丁文件中(没有挤压)并在我的顶部重放它们HEAD.
如何最好地解决我的问题?