C++11中随机数生成器(random)

您所在的位置:网站首页 cpp随机数 C++11中随机数生成器(random)

C++11中随机数生成器(random)

2024-07-12 21:40| 来源: 网络整理| 查看: 265

目录 1 随机数生成器的分类2 随机数据引擎2.1 线性同余法引擎2.2 梅森旋转法引擎2.3 滞后Fibonacci引擎2.4 非确定随机生成器2.5 默认随机数引擎 3 随机数适配器3.1 std::discard_block_engine3.2 std::independent_bits_engine3.3 std::shuffle_order_engine 4 随机数分布类4.1 均匀分布:4.2 伯努利类型分布:(仅有yes/no两种结果,概率一个p,一个1-p)4.3 泊松分布:4.4 正态分布相关:4.5 分段分布相关: 5 小工具5.1 generate_canonical5.2 seed_seq 6 示例7 参考

1 随机数生成器的分类 Uniform random bit generators (URBGs,随机数生成器/随机数引擎): 生成某一类型最小到最大范围内的均匀分布随机数据Random number distributions(随机数分布类):将URBGs转成某种分布,如,均匀分布,正态分布等

一般随机数生成器和随机数生成类配合使用,去生成随机数据。

2 随机数据引擎 2.1 线性同余法引擎

类的声明,由于实现了operator(),所以他是一个仿函数类。

template class linear_congruential_engine;

random库贴心的帮我们typedef了两个类型,防止我们不知道怎么设置参数 😃

// Discovered in 1969 by Lewis, Goodman and Miller, adopted as "Minimal standard" in 1988 by Park and Miller using minstd_rand0 = std::linear_congruential_engine // Newer "Minimum standard", recommended by Park, Miller, and Stockmeyer in 1993 using minstd_rand = std::linear_congruential_engine 2.2 梅森旋转法引擎

类的声明,同样也是仿函数类

template class mersenne_twister_engine;

typedef的类型

// 32-bit Mersenne Twister by Matsumoto and Nishimura, 1998 using mt19937 = std::mersenne_twister_engine; // 64-bit Mersenne Twister by Matsumoto and Nishimura, 2000 using mt19937_64 = std::mersenne_twister_engine; 2.3 滞后Fibonacci引擎

类的声明,也是反函数类

template class subtract_with_carry_engine;

typedef的类型

using ranlux24_base = std::subtract_with_carry_engine using ranlux48_base = std::subtract_with_carry_engine 2.4 非确定随机生成器

类的声明

class random_device;

它并不是由某一个数学算法得到的随机序列,而是通过读取文件,读什么文件看具体的实现(Linux可以通过读取/dev/random文件来获取)。文件的内容是随机的,因为文件内容是计算机系统的熵(熵指的是一个系统的混乱程度)。也是当前系统的环境噪声,系统噪音可以通过很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等。Linux的熵来自键盘计时、鼠标移动等。 在没有非确定源(如硬件设备)时他会产生伪随机数,此时每一个random_device的对象会产生相同的随机数序列

例子:

#include #include void demo(std::random_device&& rd) { for(int n = 0; n != 10; ++n) { std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3