[关闭]
@zhuanxu 2018-01-26T19:05:23.000000Z 字数 932 阅读 2460

C++11 随机数生成器

c++11


c++ random

random_device

random_device 提供 () 操作符, 用来返回一个 min() 到 max() 之间的一个数字. 如果是 Linux(Unix Like 或者 Unix) 下, 都可以使用这个来产生高质量的随机数, 可以理解为真随机数.
  1. #include <iostream>
  2. #include <random>
  3. int main()
  4. {
  5. std::random_device rd;
  6. for(int n=0; n<20000; ++n)
  7. std::cout << rd() << std::endl;
  8. return 0;
  9. }

random number engine

标准把随机数抽象成随机数引擎和分布两部分. 引擎用来产生随机数, 分布产生特定分布的随机数 (比如平均分布, 正太分布等).

标准提供三种常用的引擎:

第一种是线性同余算法, 第二种是梅森旋转算法, 第三种带进位的线性同余算法. 第一种是最常用的, 而且速度也是非常快的; 第二种号称是最好的伪随机数生成器; 第三种没用过....

随机数引擎接受一个整形参数当作种子, 不提供的话, 会使用默认值. 推荐使用 random_device 来产生一个随机数当作种子.

  1. #include <iostream>
  2. #include <random>
  3. int main()
  4. {
  5. std::random_device rd;
  6. std::mt19937 mt(rd());
  7. for(int n = 0; n < 10; n++)
  8. std::cout << mt() << std::endl;
  9. return 0;
  10. }

random number distributions

  1. //平均分布
  2. #include <random>
  3. #include <iostream>
  4. int main()
  5. {
  6. std::random_device rd;
  7. std::mt19937 gen(rd());
  8. std::uniform_int_distribution<> dis(1, 6);
  9. for(int n=0; n<10; ++n)
  10. std::cout << dis(gen) << ' ';
  11. std::cout << '\n';
  12. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注