C++ 随机引擎并不是真正的随机

c++ random engines not really random

本文关键字:随机 并不是 引擎 C++      更新时间:2023-10-16

我正在玩一些 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 的,看起来更像是正态分布,无论我使用什么引擎。有什么我没理解正确的地方吗?谢谢纪尧姆

注意到我的值大致相同

这正是您对统一随机数生成器所期望的。范围 [10^(n-1),10^n) 中的整数是范围 [0,10^(n-1)) 中的 9 倍。