C语言中的rand函数和srand函数
原创
©著作权归作者所有:来自51CTO博客作者qqtang797的原创作品,请联系作者获取转载授权,否则将追究法律责任
C语言中的rand函数和srand函数:
只能产生伪随机数,最多也只是提高模拟的程度而已,
rand函数
内部管理着一个
计数单位
,程序每调用一次,它就根据这个
计数单位
和对应的srand产生种子的值,经过一系列的运算,得到随机值,其实就相当于你传了2个参数给rand(),比如是x是计数器的值,y是srand的值,那么:rand() = x*2 + y ,举个简单的例子,实际可能比这个关系式要复杂对于给定的参数和关系式,x由
rand函数
内部管理,而y也就是srand的默认值是1,也不变,所以每调用一次只有x产生变化,而且是固定的变化,得到的随机数也就是固定的了。srand的作用就是设置y,根据以上的解释,它的作用很已经很明显了吧。其实就算设置srand,得到的还是伪随机数,只设定一个固定值的话,rand产生的伪随机数的范围就是0~RAND_MAX,而如果调用time()函数来返回一个随时都会变化的值给rand做种子的话,也只相当于扩大了rand对伪随机数列的选择范围,伪随机数列的数量由1个增加至sizeof(time_t)个,对于每个由time()产生的种子,都有一个伪随机数列与之对应,而x又不断变化。举个形象的例子:
rand函数
就像是从流水线上选选
苹果
一样(只以颜色区分),设置srand可以变换这条流水线,比如原来为编号1的流水线,srand(2)之后,就变为编号2的流水线了,但选
苹果
的位置是不变的(x不变),也就是rand
第一次
选择了1号流水线上的第3个黄色
苹果
,srand之后,rand就接下来去选2号流水线上的第4个苹果了,而如果调用srand(time(0))的,相当于每次rand选苹果之前都变换流水线,也可以理解为rand面前共有sizeof(time_t)条流水线,如果rand函数的调用速度和
time函数
相当的话,那么rand就依此从各条流水线上挑选对应位置x的苹果。其实所有的流水线和每条流水线上的苹果的摆放次序都是不变的。
上一篇:Linux查看磁盘空间使用
下一篇:Linux top命令详解
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【C语言加油站】qsort函数的模拟实现
【C语言加油站】qsort函数的模拟实现本文详细介绍了使用冒泡排序的逻辑模拟实现可以排序任意类型数组的qsort函数……
C语言 qsort排序函数 冒泡排序 回调函数 void*指针 -
C语言rand(),srand()函数真实性能分析
一直听人说c标准库的rand(),random()随机数产生函数性能极差。一直信以为真,今天做实验,发现random()函数差了170倍左右,也就是约等于425...
rand() random() random()效率 rand()效率 rand函数 -
C语言的内部函数与外部函数
这里的static是对函数的作用范围的一个限定,限定为12公里,上午上班时间为9点,下午下班时间为6点。请编写一个小程序计算小明每天打车的总费用。
c语言 开发语言 内部函数 源文件 #include -
C++中随机函数rand()和srand()的用法
的用法分类: C++2009-07-31 11:14 14713人阅读 评论(4) 收藏 举报c++numbersrandomnull一、rand() 函数名: r
随机函数 rand srand 随机数 #include -
有趣的rand()和srand()函数
&n
c++ 职场 休闲 有趣 rand()