C++ 随机数及分布学习

概念

自C++11起,标准库中包含了随机数程序库。在学习之前,我们需要明白随机有两方面的含义,一方面是指随机性(值)的源头,另一方面是指随机数的生成机制。通常情况下我们需要一个 引擎 和一个 分布。

引擎

  • 随机性的源头
    - 产生随机的无正负的值
  • 有状态
    - 状态决定了它将生成哪一个随机值序列
    - 如每次初始化一个引擎,其初始状态是相同的
    - 如果需要一个不可预期的随机值,可以传入一个 种子 给引擎构造函数
    - 状态的保存与恢复

分布

  • 将引擎产生的随机值转换为真实有用的随机数

为什么不直接使用引擎生成的随机值

标准库指出使用 C 标准随机值生成器,并以取余的方式将结果限制在某一区间内时,来自引用文献中有两点原因:许多伪随机数生成器制出来的余数可能并不很随机;某些余数出现率会远高于其它,具体例子见第二个参考链接,即rand()%10000后结果分布并不均匀。

shuffle函数

使用

待补充

参考

《C++标准库》(第二版) 17章
C++的RAND函数生成的值为什么存在严重的不随机性?
C/C++生成固定范围随机数的问题

原文地址:https://www.cnblogs.com/wangzhiyi/p/13138462.html