随机数的讨论

来源:互联网 发布:王军明 大数据商会 编辑:程序博客网 时间:2024/05/05 21:35

今天返回哈尔滨了,学校的实验室环境异常不错。开始学习数据结构了,第一章不想看,我觉得水平不够理解它。第二章是线性表,开始学习线性表相关的知识。首先要创建线性表啊,我又不想自己手动输入每个元素的值,所以就想到用随机数来代替手工。

 

 

先声明我对随机数是一点也不会,所以所有资料来源于csdn

http://www.programfan.com/club/showpost.asp?id=159906&t=o

 

devc++

源码很简单,但是根源要深究。

 

 

  

 

 

要素为randrandomrandomize

计算机不会产生随机数,软件产生的随机数都是伪随机数。随机数是由随机种子(seed)产生的,随机种子是产生随机数的一个数,由计算机主板上的定时器/计数器产生(我学过51单片机,51的定时器/计数器由时钟脉冲累计,我理解这样的种子也只是看起来随机,其实是有规律的,只不过系统频率过大,我们不精确的测量测不准它)。

 

在没有randomize()的情况下,由于计算机的随机数种子不变,且计算机的随机数计算方法不变,所以产生的随机数不变,总是一组数。例如下面的代码:

  

我的计算机上是这些数字,换另一台计算机就可能不是,甚至在我下次开机的情况下,这段代码生成的总是这组数字。关于结果还是自己做实验吧,我删除了

如果加上randomize(),效果如何呢。

代码如下

  

 

由于每次都随机产生随机种子,所以每次的随机数都不一样。这样的随机效果要强于没有randomize()的时候,不过严格意义上不能说是随机数,绝对的随机数体现事件的随机,二者没有一点点关系的意思,比如彩票中奖。

 

randomize函数可以看作是srand(clock())的宏定义----它通过用clock函数而获得系统当时的时间,并以此来初始化rand函数中的seed因子,从而得出看起来比较“随机”的数,比较好的用法就是srand((unsigned)time(null)).先定义一个宏:

#define randomize() srand((unsigned)time(null));

随机数的事情还说不完,就到这里吧,随时补充。

 

2010/9/11

今天来补充下哈,潘老师告诉我们说,100万是个小数字,所以我想了想如何突破msdn的限制,把随机数造的大一点,不过没找到方法,找了个替代品

有缺点啊有缺点

 

太霸气的方法,只是结果老潘肯定不会满意的,这么大的数,失去了随机意义额。真想用多线程一边生成大数,一边是小数,这样的话会比较漂亮额