jwliangh 发表于 2008-5-23 14:07:51

rand和 srand函数使用

马老师我在您的新书第六章中看到使用rand和srand两个随机函数产生随机数,能不能说一下两者的不同吗?我查了一下,一个是产生随机数的,一个是产生随机数种子的,是不是srand函数设置随机数产生的范围?例:rand函数在0——srand(2000)中的产生任意一个数。

watercat 发表于 2008-5-23 14:10:02

自己看看开源C库中这两个函数的实现,就明白怎么回事了……

machao 发表于 2008-5-23 17:28:17

rand函数实际是在一定范围内产生"伪"随机序列函数.所谓"伪"随机序列函数,是第n个数和n+1个数"随机"产生的.但如果种子一样的话,两次从头调用rand函数,产生的2个序列是相同的,即,两个序列中,2个第n个数相同,2个第n+1个数也相同.因此,正确使用该函数,当系统启动时,应该给rand不同的"种子"

srand函数决定rand种子的,也是一个产生"伪"随机序列的函数,根据你给的一个值产生一个"随机"的种子.但如果你给的数相同,它产生的种子也相同.因此要能产生真正的随机数,你需要在每次系统启动时,提供一个随机的数值给SRAND(),这样在以后,RAND()就产生可以实际使用的,"更随机"的随机数了.

至于,如何提供一个随机数值给SRAND(),看你的本事了.

比如设置你系统有个计数器从0-65536不停顿的循环计数,上电后需要用户按某个键进入正常工作(如输入密码),当密码输入完后,读计数器值,送SRAND().由于每个人操作按键速度和消耗时间肯定不同,那么读到的计数器值就是"随机"的.

win2kddk 发表于 2008-5-23 21:49:33

可以用做随机加密验证。

ChenHP 发表于 2008-6-6 14:05:17

mark~~
页: [1]
查看完整版本: rand和 srand函数使用