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