关于随机数的生成,其实方法有很多,主要分为两类,硬件生成和软件生成。
先说下硬件生成的方法,芯片厂商intel出产的就有一种芯片,专门用于生成随机数,其原理是利用电阻和振荡器来产生噪声作为信息源生成随机数。噪声一般都是无规律的,因此利用此方法生成的肯定就是真随机数了。此芯片一般集成在intel芯片组中。其实我们一般见的电路中都是有噪声的,只不过该噪声对电路实现的功能影响不大,而且一般的电路都有减弱噪声的功能模块来削弱噪声。另外还有一些比较专业的产生真随机数的芯片厂商,实现方法是利用测不准原理。也就是说电子相对于原子核的位置和当前的时间关系是测不准的。一般学过高中化学的童鞋都听说过测不准原理。这种芯片在国内其实是经常用到的。比如我们的彩票行业。主要用这种方法来实现中奖号码的选取,之所以不用电路噪声来生成这里的随机数,那是因为电路噪声容易受到干扰,做过片上系统开发的童鞋也应该知道,我们针对芯片编写的程序,容易受到外界的干扰,比如在只读存储器上写的程序,受到紫外线照射后,程序容易丢失,在一般芯片上跑的程序,如果一辆汽车刚好经过这里,程序也会容易出错。呵呵。这些都是噪声影响了程序的运行。
上面简单的说了下硬件生成的方法。其实我主要想说说软件的实现。在不同语言中,都有类似的实现方法。最流行的莫过于高德纳大师在TAOCP一书中描写的线性同余算法了。该算法能够生成伪随机数。
算法的公式如下:
X(n+1) = (a * X(n) + c) % m