C++11 是什么让你认为你可以在C++;11?

C++11 是什么让你认为你可以在C++;11?,c++11,random,64-bit,C++11,Random,64 Bit,也许我的想法全错了,但在我尝试使用随机头中提供的内容创建RNG时,我发现随机数的最低有效位缺乏统一性。事实上,当我在VisualStudio2010调试器中查看十六进制显示的数字时,大多数时候它们都以0x00结尾 所以我写了这段代码来证实我的怀疑: std::random_device rd; std::mt19937_64 generator(rd()); std::uniform_int_distribution<unsigned long long> distribution(

也许我的想法全错了,但在我尝试使用随机头中提供的内容创建RNG时,我发现随机数的最低有效位缺乏统一性。事实上,当我在VisualStudio2010调试器中查看十六进制显示的数字时,大多数时候它们都以0x00结尾

所以我写了这段代码来证实我的怀疑:

std::random_device rd;
std::mt19937_64 generator(rd());
std::uniform_int_distribution<unsigned long long> distribution(0, ULLONG_MAX);

int cnt[256];
for (int i = 0; i < 256; i++)
    cnt[i] = 0;
for (int i = 0; i < 10000; i++)
    cnt[distribution(generator) & 0xFF]++;
std::随机设备rd;
标准:mt19937_64发生器(rd());
标准:均匀分布(0,ULLONG_MAX);
int-cnt[256];
对于(int i=0;i<256;i++)
cnt[i]=0;
对于(int i=0;i<10000;i++)
cnt[分配(生成器)&0xFF]+;
结果表明,大约95%生成的随机数以“0x00”结尾

我对统一性的理解错了吗? 要生成均匀分布的64位无符号整数,我必须做什么


我打算用它们作为低分辨率随机数的基础,我可以用相应的0xF…F模式屏蔽它们


性能不是问题。灵活性很好。

无需重新编程。更新你的VS版本。你是对的。这仅在使用“Visual Studio 2010(v100)”平台工具集时发生。将项目属性设置为“Visual Studio 2012(v110)”时,一切正常。我刚刚编辑了我的帖子。“我打算用它们作为低分辨率随机数的基础”-你正在重新发明
std::uniform\u int\u distribution
。即使您的VS2010工具集有缺陷,更好的解决方案可能是Boost.Random。