关于随机数

在随机数这个问题上,一般程序员总是要经历下面的过程:

  1. 压根没有随机数的概念,想使用随机数的念头往往出于想每次执行自己辛辛苦苦写的小程序时可以有不一样的结果。
  2. 发现有个函数/方法是专门用来生成随机数的,试了一下,确实挺随机的。
  3. 兴高采烈的在自己的小程序里使用了这个函数/方法。结果发现每次结果其实还是一样的(C的话)
  4. 经历了千万次google才发现原来自己没加种子,只有不同的种子才会产生不同的随机数。往往种子都是使用一个恒定在变的东西——–时间。
  5. 当程序被高频访问的时候,问题又来了————-时间在计算里有最小单位,所以高频访问中临近访问的随机数是一样的。
  6. 又学会了一种叫随机数仓库的东西,来应对突然的高频访问。不断的往随机数队列里填充随机数,然后每个访问都是去随机数队列里去取。
  7. 然后,突然有一天,有人告诉你,这些不是随机数,最多只能称为伪随机数。

那么问题来了,什么是伪随机数,维基百科上的解释

伪随机性英语:Pseudorandomness)是指一个过程似乎是随机的,但实际上并不是。例如伪随机数(或称伪乱数),是使用一个确定性的算法计算出来的似乎是随机的数序,因此伪随机数实际上并不随机。在计算伪随机数时假如使用的开始值不变的话,那么伪随机数的数序也不变。伪随机数的随机性可以用它的统计特性来衡量,其主要特征是每个数出现的可能性和它出现时与数序中其它数的关系。伪随机数的优点是它的计算比较简单,而且只使用少数数值很难推算出计算它的算法。一般人们使用一个假的随机数,比如电脑上的时间作为计算伪随机数的开始值。

所以严格来讲,计算机生成的随机数并不是严格意义上的随机。那么我们如果想要真正的随机数怎么办呢。

有一个简便的方法,调用http://random.org的接口。

调用示例等参考此链接

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据