随机数的讨论
来源:互联网 发布:王军明 大数据商会 编辑:程序博客网 时间:2024/05/05 21:35
今天返回哈尔滨了,学校的实验室环境异常不错。开始学习数据结构了,第一章不想看,我觉得水平不够理解它。第二章是线性表,开始学习线性表相关的知识。首先要创建线性表啊,我又不想自己手动输入每个元素的值,所以就想到用随机数来代替手工。
先声明我对随机数是一点也不会,所以所有资料来源于csdn。
http://www.programfan.com/club/showpost.asp?id=159906&t=o
用devc++。
源码很简单,但是根源要深究。
要素为rand,random,randomize。
计算机不会产生随机数,软件产生的随机数都是伪随机数。随机数是由随机种子(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的限制,把随机数造的大一点,不过没找到方法,找了个替代品
有缺点啊有缺点
太霸气的方法,只是结果老潘肯定不会满意的,这么大的数,失去了随机意义额。真想用多线程一边生成大数,一边是小数,这样的话会比较漂亮额
- 随机数的讨论
- 有关随机数的一些讨论
- 随机数的讨论(二)
- 数据库中取随机数的方法讨论
- 讨论随机数-摘录
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法的讨论
- C语言随机数生成方法——srand种子的讨论
- 随机数的
- [技术讨论]讨论问题的两个基本原则
- 关于checkpoint的讨论
- 精彩的讨论
- 关于checkpoint的讨论
- 超越浏览器 的讨论
- WebService 安全性的讨论
- WebService 安全性的讨论
- 小小彩票模拟
- Oracle、DB2、Sybase、MySQL的这些年(截至2007年)
- tenacy VPN
- DECLARE_WAIT_QUEUE_HEAD()的说明
- 小小21点模拟
- 随机数的讨论
- 哥德巴赫猜测
- 进制转换栈实现C++
- Linux_resin.conf_3.1.9_优化
- ubuntu中检测CPU&主板温度,风扇转速,电源适配器电压命令
- 快速排序C++
- 通过人员表里面的销售代表,带出所在的经理~!
- 触发器 测试~!学习~! 实例~!
- 实现动态ASP.NET水晶报表