计算机为什么能生成随机数
有一种论调说是计算机是有限状态机不能生成随机数,实际上我们找不到这样严密的东西。在这里我们告诉不相信计算机能生成随机数的人一个方法如何从计算机得到随机数。这个方法不能高效的生成随机数,用它旨在说明问题,实际方法多得是但多是不太简单,说起来啰嗦。
随便使用一种语言编个小程序即可得到随机数。找个小的可执行程序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毫秒
..............................
截取上面变化数据中段,就可以得到随机数。