C++11随机数库

random随机数库

C++11引入了新的随机数生成机制,那就是<random>随机数库,支持多种伪随机数生成算法,多种连续和离散随机数分布算法,以及封装了真正的随机数生成引擎random_device。对于写随机数相关的程序来说实在是太香了。

随机数生成引擎和随机数分布引擎

  • 随机数生成引擎(Generator):用于生成标准分布的随机数序列
  • 随机数分布引擎(Distribution):对随机数生成引擎生成的随机数进行处理,使得最终输出的随机数满足特定的分布

伪随机数生成引擎比较

一般情况就用标准库定义的std::default_random_engine就行,在各个实现中会自己决定std::default_random_engine具体是哪种随机数生成引擎。

随机数生成引擎 计算公式 说明
std::minstd_rand x = x * 48271 % 2147483647 线性同余序列,简单,随机性比较差
std::minstd_rand0 x = x * 16807 % 2147483647 线性同余序列,简单,随机性比较差
std::mt19937 我不知道 梅森旋转算法,随机序列周期长,处理相对耗时
std::mt19937_64 我不知道 同上,只是保证返回值有64位
std::ranlux24 我不知道 带进位减法引擎,是对线性同余算法的改进
std::ranlux48 我不知道 同上
std::knuth_b 我不知道 包装一下线性同余引擎,将其生成的序列打乱输出

真正的随机数random_device

真随机数生成器(但有些编译器没有实现),一般可以用于生成伪随机数生成器的种子。在Linux的实现中,是读取/dev/urandom设备,因为生成真随机数需要消耗熵池里的资源,如果熵池空了,请求生成随机数的行为就会被阻塞,要等到收集足够多的环境噪声后才能继续产生真随机数(但从关于 /dev/urandom 的流言终结这篇文章中指出,Linux读取/dev/urandom设备是不会阻塞的,并且也可以当作是真随机数)。
若平台不支持random_deviceentropy接口返回0。

原文链接: https://www.cnblogs.com/HachikoT/p/12732426.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++11随机数库

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/343002

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午1:52
下一篇 2023年3月2日 上午1:52

相关推荐