我无法理解计算机如何制作随机数。 我的意思是什么硬件可以做到这一点?并且计算机只有一个源来执行此操作并且所有编程语言都使用它吗? 提前致谢。
答案 0 :(得分:2)
简短的回答是计算机无法轻易制作真正随机的数字。有几种方法可以生成随机数,但有些方法很快但不是随机的,有些是缓慢但真实的......
伪随机生成器
大多数低级语言(即C)具有内置功能,允许它们伪造生成随机数,但这不是真正的随机数生成。它的工作原理是从“种子”值,一个初始数字字符串开始,然后一遍又一遍地修改这个种子,以创建一个“随机”字符串。
他们的不足之处在于,通过正确的种子和因子,可以创建条件以强制生成一定数量。此外,由于生成的性质,当绘制图形时,结果将不会均匀分布。正如上面的回答者所提到的,程序员可以做些事情来使它更随机,但由于上述原因,该方法不能真正随机。一个例子是大多数编程语言中的随机数生成器。它是硬编码的,并在CPU中执行。
熵发生器
通过熵生成工作的随机数通过测量熵的类型(无序,或者,正如我所听到的那样,混乱 @duffymo告诉我,混乱不是一个好的同义词。抱歉!)被认为是随机的。大气和热噪声是常见的测量方法。它们通常被认为比上述选择“更好”,因为它们在很大程度上更接近于真正的随机性。一个问题是它们很慢 - 除非收获足够的熵,否则无法生成数字。一个例子是random.org,一个大气噪声熵随机数发生器(比如快10倍!)。它由任何硬件进行熵测量。
量子发生器
熵发生器的子集,量子发生器测量量子因子(经典物理中未使用的因子),例如the spin of particles来确定数字。缺点是真正的量子发生器很昂贵。一个例子是this piece of hardware,它使用光子的路径来确定数字。
希望这有帮助!
答案 1 :(得分:1)
它可以是硬件,但大多数语言如Java和C#使用Donald Knuth在其作品"The Art of Computer Programming"中最好地解释的软件构造:线性同余生成器。
你可以想象,problems有这些方法。
有尝试改进它(例如Mersenne Twister)。
有大量的统计测试来评估给定的随机数生成算法Diehard Tests。 (当我听到这些测试时,我总是通过按下电池来拍摄暴风雪中的大型车辆。)
我愿意打赌这些伪随机数生成器的周期对你的应用来说已经足够了。
生成真正随机数的最佳方法是在hardware中使用自然界的量子过程。