3
我玩了一点C++随机引擎,有什么让我不高兴。 已经注意到,我所拥有的值是大致相同的顺序,我做了如下试验:C++随机引擎不是真的随机
#include <random>
#include <functional>
#include <iostream>
int main()
{
auto res = std::random_device()();
std::ranlux24 generator(res);
std::uniform_int_distribution<uint32_t> distribution;
auto roll = std::bind(distribution, generator);
for(int j = 0; j < 30; ++j)
{
double ssum = 0;
for(int i = 0; i< 300; ++i)
{
ssum += std::log10(roll());
}
std::cout << ssum/300. << std::endl;
}
return 0;
}
,我打印的值均约9.2看起来更像是一个正态分布,发动机我用什么的。 有没有我没有正确理解的东西? 谢谢, 纪尧姆
你为什么要用'log10'?这不会显着影响分布的形状吗? –
根据您使用的生成器,您可能需要多次调用'random_device'来正确地播种所有内部状态。例如,'std :: mt19937'使用624字节的内部状态,所以你需要一个'std :: seed_seq'和多个输入来播种所有的内容。参见http://stackoverflow.com/questions/15509270/does-stdmt19937-require-warmup –
另请参阅[中心极限定理](https://en.wikipedia.org/wiki/Central_limit_theorem)。你对一个随机数发生器的结果进行平均*。 “独立随机变量迭代数量足够大的算术平均数,每个都有一个定义良好的(有限的)期望值和有限的方差,将近似正态分布,而与基本分布无关。”你在* 300 *随机分布的独立变量上取平均值。 – jaggedSpire