打印
[boot]

Linux中使用随机数

[复制链接]
454|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蒋博1026|  楼主 | 2019-7-20 08:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、随机数和伪随机数
(1)、随机数是随机出现,没有任何规律的一组数列
(2)、真正的完全随机的数列是不存在的,只是一种理想情况。我们平时要用到随机数时一般只能通过一些算法得到一个伪随机数列。
(3)、我们平时说到随机数,基本都指的是伪随机数。
2、Linux中随机数相关API
(1)、连续多次调用rand函数,可以返回一个伪随机数序列
(2)、srand函数用来设置rand获取的伪随机数序列的种子
3、实战说明
(1)、单纯使用rand重复调用n次,就会得到一个0-RAND_MAX之间的伪随机数,如果需要调整范围,可以得到随机数序列后再进行运算。(比如取余)
(2)、单纯使用rand来得到伪随机数序列有缺陷,每次执行程序得到的伪随机数序列是同一个序列,没有办法得到其他序列
(3)、原因就是因为rand内部的算法其实是通过一个种子(seed,其实就是一个原始参数,int类型),rand内部默认是使用1作为seed的,种子一定的算法也是一定的,那么每次得到的伪随机数序列肯定是同一个。
(4)、所以要想每次执行这个程序获取的伪随机序列不同,则每次都要给不同的种子。用srand函数来设置种子。
4、总结说明
(1)、在每次执行程序时,先用srand设置一个不同的种子,然后再多次调用rand获取一个伪随机序列,这样每次都得到一个不同的伪随机序列。
(2)、一般的常规做法是用time函数的返回值来做srand的参数。
5、在Linux系统中获取真正的随机数
(1)、Linux系统收集系统中的一些随机发生的事件的时间(譬如有人移动鼠标,触摸屏的操作和坐标的移动等等)作为随机种子去生成随机数序列。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

323

主题

1827

帖子

18

粉丝