最近在高性能集群上面做蒙特卡罗模拟,需要高质量的随机数,标准库提供的rand()质量不够好,而C++11带来的其中一个新特性就是关于random的,正好用来试一试。不过要最新版gcc才支持的比较好,build最新版的gcc真是费了很大劲~~~,进入正题

在C++11中分为两部分:GeneratorsDistributions

  1. Generators:

    这部分又分伪随机数和真随机数了。伪随机数主要有linear_congruential_engine,mersenne_twister_engine和subtract_with_carry_engine三个引擎。详细这里就不说了。重点在获取真随机数这里。

    标准库提供了一个非确定性随机数产生器(Non-deterministic random number generator),在linux底下,它可以读取/dev/random和/dev/urandom两个设备文件,来产生min()到max()之间的一个随机整数,可以认为是真随机数。来一个简单的例子:


    #include
    #include
    using namespace std;
    int main()
    {
        random_device rd("/dev/random");                              
        cout<<"Minimum:"<


  2. Distributions

    标准库提供了满足各种常见分布的随机数,像均匀分布、正态分布等,详见手册。





    参考:http://www.cplusplus.com/reference/random/