【问题标题】:Random number understanding [duplicate]随机数理解[重复]
【发布时间】:2014-07-31 13:33:26
【问题描述】:

我无法理解计算机如何生成随机数。 我的意思是什么硬件可以做到这一点?计算机是否只有一个来源可以做到这一点,而所有编程语言都使用它? 提前致谢。

【问题讨论】:

    标签: random language-agnostic


    【解决方案1】:

    简短的回答是,计算机无法轻易生成真正的随机数。不过,有几种方法可以生成随机数,有的快但不是随机的,有的慢但确实如此……

    伪随机生成器

    大多数低级语言(即 C)都内置了允许它们伪生成随机数的功能,但这并不是真正的随机数生成。它的工作原理是从一个“种子”值、一个初始数字字符串开始,然后一遍又一遍地修改这个种子,以创建一个“随机”字符串。

    他们的不足之处在于,有了正确的种子和因素,可以创造条件来强制产生一定的数量。此外,由于生成的性质,绘制图表时,结果不会均匀分布。正如上述回答者所提到的,程序员可以做一些事情来使其更加随机,但由于上述原因,该方法不能真正随机。一个例子是大多数编程语言中的随机数生成器。它是硬编码的,在 CPU 中执行。

    熵生成器

    通过熵生成工作的随机数通过测量一种熵来工作(无序,,或者,正如我听说的那样,混沌 @duffymo 告诉我,混沌不是一个好的同义词。对不起!)这被认为是随机的。大气和热噪声是常见的测量对象。它们通常被认为比上述选择“更好”,因为它们在大多数情况下更接近真正的随机性。一个问题是它们很慢 - 除非收集到足够的熵,否则无法生成数字。一个例子是random.org,一个大气噪声熵随机数生成器(说快了 10 倍!)。它是由任何一个硬件来测量熵的。

    量子发生器

    熵发生器的子集,量子发生器测量量子因子(经典物理学中不使用的因子),例如the spin of particles 来确定一个数字。缺点是真正的量子发生器很昂贵。一个例子是this piece of hardware,它使用光子的路径来确定一个数字。

    希望这会有所帮助!

    【讨论】:

    • 熵和混沌完全是两个不同的概念。不是同义词。
    • @duffymo 熵不是衡量混乱的标准吗? (忽略信息论对熵的定义)
    • 混沌意味着非线性;你仍然可以在线性系统中产生熵。他们不一样。熵是热力学中一个较老的概念。混沌是 1980 年代一些发现的流行词。
    • @duffymo 感谢您的澄清,并为不正确的定义道歉。
    • 不需要道歉;至少你在想。
    【解决方案2】:

    它可以是硬件,但大多数语言(如 Java 和 C#)都使用一种软件结构,Donald Knuth 在他的作品"The Art of Computer Programming":线性同余生成器中对此进行了最佳解释。

    您可以想象,有problems 使用这些方法。

    有人尝试改进它(例如Mersenne Twister)。

    有大量的统计测试来评估称为Diehard Tests 的给定随机数生成算法。 (当我听到这些测试时,我总是想象大型车辆在暴风雪中通过鸣喇叭在寒冷中启动。)

    我敢打赌,这些伪随机数生成器的周期对于您的应用来说绰绰有余。

    生成真正随机数的最佳方法是使用hardware 中的自然量子过程。

    【讨论】:

    • 好文档,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 2013-07-05
    • 2014-03-22
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多