C++11中随机数生成器(random) |
您所在的位置:网站首页 › cpp随机数 › C++11中随机数生成器(random) |
目录
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 |