strand(time(null)) 在C语言中 为什么可以 随机化数种子 原形是什么

 我来答
风若远去何人留
2015-06-03 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450134
专业C/C++软件开发

向TA提问 私信TA
展开全部

在C语言中获取随机数的函数是rand(); 

一个合格的随机数值必须由获取到的值足够散列,以及值不可预知的特性,但如果不做任何处理直接调用rand(),那么得到的值是固定的。下面是一个例子:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    for(i = 0; i < 10; i ++)
        printf("%d\n", rand());//获取10次随机数并打印。
        
    return 0;
}

运行这个程序,看起来没什么问题,因为获取到的10个数字都是散列的,很有随机数的感觉。但重复运行这个程序就会发现,每次运行得到的十个数都是同样的,这个并不符合不可预知的特性。

所以C语言中的随机数函数rand()被称为伪随机数


通过srand函数,可以让这个伪随机数更“真”一些,它的原理是设置一个随机数种子,然后后续的随机数依赖于种子值。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    for(i = 0; i < 100000; i += 10000)
    {
        srand(i);
        printf("%d\n", rand());//获取10次随机数并打印。
    }
        
    return 0;
}

反复运行这个程序,会发现,相同的随机数种子获取到的随机数值同样是相同的。这样这个随机数种子值又不能是固定值了,于是需要想办法让这个种子值有变化。

让这个值有变化的方法有很多种,最常用的就是通过时间函数time()。这个函数是获取当前时间值的,单位是毫秒。通常的调用方式是time(NULL);

用这个值来做随机数种子可以让每次调用得到的种子值不同,因为要达到完全相同的效果,必须要在毫秒级的相同时间下同时执行,这个概率太低了。

于是time(NULL)就成了最常用的随机数种子。


以上就是srand(time(NULL)); 经常放在随机数发生前作为随机数种子的原因了。

L_o_o_n_i_e
2010-05-20 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5247万
展开全部
srand -- 初始化种子的函数,不是 strand
time(null) -- 实参,取当前时间函数。
由于每次初始化时“当前时间”不同,这就保证获得的种子也不同,随机性更好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李骏男
2010-05-20 · TA获得超过109个赞
知道答主
回答量:91
采纳率:0%
帮助的人:87.7万
展开全部
注(似乎函数写错,应该是srand(time(null))吧 )

srand(time(null))利用时间设置随机种子产生随机数

更具体的介绍 参考以下内容http://hi.baidu.com/douyuan516/blog/item/a424262a7527bff0e6cd400c.html

参考资料: http://hi.baidu.com/douyuan516/blog/item/a424262a7527bff0e6cd400c.html

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式