为什么每次c 产生随机数的随机数都是一样的啊解决方案

我常用的简单随机数产生方法
啰嗦一些以单片机应用为主的电子技术问题,偶尔发点牢骚。如果您想我了,邮件()和MSN(sj_)都能找到我。本博客提供《删繁就简-单片机入门到精通》一书下载链接,点击最底部的“查看更多”可翻页。
标题:我常用的简单随机数产生方法
&&&&&&& 在单片机程序编写中,常常需要使用随机数字,如何产生随机数的方法有许多,常见的是用一个简单的算法计算出随机数,这样就可以得到一个数学理论上是随机分布的随机数序列。
&&&&&&& 我个人不习惯使用这种方法:首先是使用的人理解计算用的数学公式会比较难;其次虽然序列整体看是随机数组合,但每次开机后都得到同样随机数序列,对应用程序来说并不完全符合随机状态;另外还需要比较多的程序代码才能实现。
&&&&&&& 我在程序中对于随机数的生成一般都不用公式的方法,而是直接利用硬件的特性来产生。
&&&&&&& 方法一:
&&&&&&& 利用定时中断,创建一个1毫秒的定时中断程序,里面对一个计数器进行累加,在程序需要使用随机数的时候就使用这个计数器的值。只要程序有人机交互功能,一旦人有进行选择控制,做出选择控制的时间对机器来说无疑是绝对随机,因为人和机器完全独立,机器并不知道人会在什么时候做出选择。就算是两个人看到机器某个提示立即按下某个键,表面看好像两个人是同时做出反应,如果把时间细分,这两个人就不可能是绝对同时反应,一定会存在一个时间差。想一想,人的反应速度能达到毫秒级别吗?所以如果是一个16位的毫秒计数器,就可以提供65536种可能给应用程序,重复的可能性已经相当小。
&&&&&&& 该方法不足时会占用一定的系统资源,比如一个指令速度为8MHz的8位单片机,假定定时中断需要占用20个指令周期,中断程序会占用单片机约0.2%的运行时间。
&&&&&&& 方法二:
&&&&&&& 利用ADC,我们知道电路上电后会有噪声,这个噪声可以被看做随机干扰,如果用ADC测量这个噪声,得到的同样是随机数。该方法不足主要是噪声一般只有几十毫伏,不能得到精度很高的随机数,尤其是8位ADC,效果会不太理想,最好是12位以上的ADC才有比较好的效果。
&&&&&&& 方法三:
&&&&&&& 方法一合方法二组合使用,用这两种方法产生的连个不同随机数经过运算得出新的随机数。
本文引用通告地址:
| 浏览(7172) 引用(0)
如果您想出现在此位置,请您先【】!
( 14:10:30)
呵呵,都是小方法,不见得非常符合理论,只是个人觉得可以这样用
( 13:01:00)
方法一 很巧妙。
Copyright (C)2000-.cn第三方登录:为什么C++ rand函数产生的随机数有相同的规律?
要评论问题请先或
赞同来自: 、
要参与问题请先或
- 90后程序员
要参与问题请先或
要参与问题请先或
要参与问题请先或
- Do all in command line
要参与问题请先或
- 理工小强
要参与问题请先或
浏览: 7531
关注: 4 人

我要回帖

更多关于 excel产生随机数 的文章

 

随机推荐