我正在尝试使用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左右,看起来更像正态分布,无论我使用哪个引擎。 我是否有什么理解错误? 谢谢, Guillaume
log10
?这难道不会极大地影响分布的形状吗? - Chris Beckrandom_device
才能正确地初始化所有内部状态。例如,std :: mt19937
使用624字节的内部状态,因此您需要一个std :: seed_seq
和多个输入来初始化其中的全部内容。请参见https://dev59.com/I2Up5IYBdhLWcg3wHUvi - Jesper Juhl