技术的乐趣在于分享,欢迎多多交流,多多沟通。
全部博文(877)
分类: LINUX
2015-02-02 11:09:50
我们知道rand()函数可以生成随机数,其实是在种子的基础上做某种变换并返回生成的随机数。在默认情况下,种子是1。写一个小程序测试一下。
每次执行结果都是 9 4 8 8 10 2 4 8 3 6。在没有修改种子的情况下,程序每次运行都会产生相同的一组随机数。
可以调用srand(unsigned seed)修改种子,这样先后两次运行的程序就会产生的随机数就会不同。一般会选用时间作为种子,例如:
srand((unsigned)time(NULL));
这样种子会随时间在变,产生的随机数重复的可能性就小。但是这里还存在一个问题:time返回的是距离1970.01.01零时的秒数 ,如果rand函数在1s内调用多次,那么产生的数据是相同的。可以用下面的代码进行测试。
运行上面的程序,会发现随机数重复相当厉害。根据随机数生成的原理,我们可以让种子变化快一些来降低重复概率:将time()换成clock(),clock----
Calculates the wall-clock time used by the calling process.
返回处理器调用某个进程或函数所花费的时间,单位是1秒的CLOCKS_PER_SEC分之一,其中CLOCKS_PER_SEC在vs2008版本的time.h中的定义是1000,这样就使得种子变化的速度变快,降低随机数重复概率。