计算机为什么能生成随机数?
来源:互联网 发布:易语言鼠标点击源码 编辑:程序博客网 时间:2024/04/30 21:16
有一种论调说是计算机是有限状态机不能生成随机数,实际上我们找不到这样严密的东西。在这里我们告诉不相信计算机能生成随机数的人一个方法如何从计算机得到随机数。这个方法不能高效的生成随机数,用它旨在说明问题,实际方法多得是但多是不太简单,说起来啰嗦。
随便使用一种语言编个小程序即可得到随机数。找个小的可执行程序A(一个空的可执行文件),我们用编的程序去连续调用程序A,并且用现成的时间函数来计量程序A的运行时间(时间单位用毫秒),将运行时间做成一个数组,得到a1,a2,...,an,共n个数据,让后计算它们的平均值p,然后让每个数组成员依次减p,得到另一个数组,做一个统计凡是大于或等于0的计一个数1,凡是小于零的计一个0,这样得到的由0和1组成的数组可以作成了一个n位的二进制随机数。一直算下去你就会发现,根本无法预测下一个数是1还是0,而随机数就这样产生了。
不相信的人可以自己实践一下,很简单的。
效率较高的随机数生成方式一例:
采用高精度的时间戳函数,可以轻而易举的获得随机数。例如测试一个函数的运行时间得到:
3.254924718072082毫秒
4.3321148358227468毫秒
2.61374001444418166毫秒
9.5216012090908571毫秒
..............................
截取上面变化数据的中段,经处理就可以得到随机数了。
随便使用一种语言编个小程序即可得到随机数。找个小的可执行程序A(一个空的可执行文件),我们用编的程序去连续调用程序A,并且用现成的时间函数来计量程序A的运行时间(时间单位用毫秒),将运行时间做成一个数组,得到a1,a2,...,an,共n个数据,让后计算它们的平均值p,然后让每个数组成员依次减p,得到另一个数组,做一个统计凡是大于或等于0的计一个数1,凡是小于零的计一个0,这样得到的由0和1组成的数组可以作成了一个n位的二进制随机数。一直算下去你就会发现,根本无法预测下一个数是1还是0,而随机数就这样产生了。
不相信的人可以自己实践一下,很简单的。
效率较高的随机数生成方式一例:
采用高精度的时间戳函数,可以轻而易举的获得随机数。例如测试一个函数的运行时间得到:
3.254924718072082毫秒
4.3321148358227468毫秒
2.61374001444418166毫秒
9.5216012090908571毫秒
..............................
截取上面变化数据的中段,经处理就可以得到随机数了。
0 0
- 计算机为什么能生成随机数?
- 随机数的计算机生成
- 计算机为什么能进行计算
- 为什么计算机程序能解决问题
- 计算机中随机数的生成
- 简述计算机随机数生成原理
- 计算机生成随机数的一种方法
- 计算机生成真随机数原理及实现
- 利用计算机内部计数器生成真随机数原理及实现
- 给定一个能生成1到5随机数的函数,如何利用它来生成1到7的随机数。
- 【随机数】生成随机数模板
- 生成随机数
- 随机数生成
- 随机数生成
- 生成随机数
- 生成随机数
- 生成随机数
- 随机数生成
- C语言链表小例子备份
- 解决工行MasterCard安全证书错误
- cocos2d-x 读取xml中的“\n”不能换行
- 2013.12.28 学习九九乘法表
- Least Common Multiple
- 计算机为什么能生成随机数?
- oracle的number类型精度、刻度范围
- spring rmi使用心得
- 运算符重载
- 关于HOOK浏览器NtDeviceIoControlFile函数,修改POST数据的问题
- 2013.12.29 Java--函数(重载)
- ffmpeg与新合成程序效率对比测试
- Python的print用法
- 质因数能分解出的最高个数