您的位置:首页 > 其它

关于产生随机数列的重点-自己遇到的问题

2013-11-05 16:14 204 查看
srand()((unsigned int)time(0));

srand()的形参是unsigned int类型的;

这句话只要写一次,一般情况下只能写一次;

随机数是随机的数,但计算机不可能产生随机数,计算机根据你的输入,再跟一个算法就产生一个特定的序列.只要

你给计算机一个相同的数,计算机返回的就是一个特定的数,所以这样的数叫做伪随机数.

而srand()(unsigned int par);这就是原型,这就是你给计算机的数.计算机通过rand()返回一个序列,

假设是{2,6,8,51....},只要给相同的参数, 这个序列是特定的.int a=rand();这时候a=2;所以可以得出只要每次给计

算机不同的数也就是srand(unsigned int pra)也就是给pra是不同的值,我们就可以认为这个序列是随机的.要想给不

同的值,

最简单的方法是把系统时间转化成unsigned给计算机就可以了,因为每时每刻时间都是不同的.这里要注意,时间是秒为

单位,也就是说你如果srand((unsigned)time(NULL));

只是在每一秒内取随rand()的话,因为时间还没来得及变,它还不是完全随机的,在下一秒就会换取另一条序列,可以

说是相对的随机。这牵扯掉内部的东西,只要知道层面上的东西就够了。现在我来告诉你为什么你得到了2组一样的结

果,因为计算机运算的速度是相当快的,你的2次srand()取值操作肯定是在一秒内之间发生的,第一次产生随机数

后,你又写了一遍srand((unsigned)time(NULL)); 相当于根据时间又埋下了种子,而这次埋下的种子和上一次的种子

是完全相同的,所以产生的序列也相同,于是计算机又按顺序从头开始把这条序列中的值取出来,产生了上述结果;

总结,在程序中只要写一次srand((unsigned)time(NULL)); 这个很重要,重复调用 会出现随机出来的点数容易相同
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: