2009-09-20 40 views
3

此问题可能不是语言特定的。为什么垃圾值不能作为随机数?

  • 是否可以创建一个真正的随机数?
  • 如果不是为什么随机数生成必须通过一些算法,为什么垃圾值不能作为随机数。
+2

你如何定义一个“真正的”随机数? – 2009-09-20 11:53:14

+0

应该是不可预知的... – Xinus 2009-09-20 11:57:33

+0

对于随机数生成器之外的所有事情都是不可预测的。 – Xinus 2009-09-20 12:14:35

回答

19

它可以。根据您的随机数的定义:

You can never be sure http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/00000/2000/300/2318/2318.strip.gif

在大多数应用中,你从一个随机数发生器所期望的是产生的均匀分布数字序列。垃圾值不提供此特性。

是否可以创建一个真随机数?

如果您将“真正随机”定义为不可预测,那么问题是“什么不可预测的?”。

cryptographically secure (pseudo-)random number generators试图从用户级代码隐藏随机数生成器的状态,也就是说,理想情况下,只有内核模式的代码可以切实预测下一个随机数。然而,孤立的计算机系统(没有任何外部输入)是确定性的有限状态机。也就是说,通过了解机器的当前状态,您可以预测下一个状态,即总是。所以,如果你的意思是一般软件系统“不可预知”,否则你不能使用确定性系统根据这个定义产生“真正的随机性”。

还有另一种更具哲理性的不可预测性。即使你依赖外部输入(如大气噪声或其他手段),他们真的不可预测吗?有人可能会争辩说,我们生活在一个确定性的世界中,就像数字计算机一样,一切都有决心要发生;所以,没有任何随机性。我没有答案。

+0

但是,它可以用作某些时间段内种子的输入。比如,每x分钟播种一次垃圾。 – Dykam 2009-09-20 11:47:10

+3

+1使用迪尔伯特澄清一点... – Smalltown2k 2009-09-20 11:55:39

+3

他改变了颜色。 :O – shuckster 2009-09-20 12:02:16

1

垃圾值是不可预测的,你不能对它们做任何假设。如果你想要一个真正的随机数,你的算法将不得不涉及一些“现实世界”变量(例如,CPU温度,风扇速度,环境噪声......)。否则,你的“随机”值将是非常可预测的。

1

没有已知的“真实”随机数发生器(截至目前),但我们确实有伪随机数发生器,它们生成的数字可以作为“实际”目的的随机数。

+0

你不能用软件来做,但采样热噪声或核衰变是随机的。所以我们有真正的硬件随机数发生器。 – 2009-09-20 11:56:16

+0

除了伪随机数,肯定还有其他的随机数来源。对于密码学,你需要不随机的随机数。随机数的一个有趣的例子可以在http://www.lavarnd.org/找到。 – 2009-09-20 12:00:48

+0

“一些物理现象,比如齐纳二极管中的热噪声似乎是真正随机的,可以作为硬件随机数发生器的基础,然而,许多机械现象具有不对称性和系统偏差,使得结果不是真正随机的。
我在看实际可行的东西.. :) – 2009-09-20 12:06:26

4

“垃圾值”我认为你的意思是未初始化的内存。你不会得到很好的发行版,更重要的是你会得到很多重复值序列。对于大多数需要随机数的应用程序来说,连续获取数千个相同的数字将毫无用处。

对于一个数字是一个“真正的随机数”,它必须是非确定性的。而且,由于几乎所有东西都(可能)是确定性的,所以真的没有像随机数那样的东西。大气噪声的混合可能是目前最接近的。

1

计算机是确定性的,只能生成伪随机数,除非它们依赖于一些外部随机过程。

伪随机数发生器形成一个序列,迟早会重复。

当然,非常长的序列实际上可能与'真正的随机'数字没有区别。

一个'垃圾值'可能被用来播种一个随机数发生器,但问题是'种子使用了什么样的数值范围?

它可能会引入可预测性,,因为我们知道一些伪随机数发生器产生相同的序列时,相同的种子。