为什么垃圾值不能作为随机数?

问题描述 投票:3回答:5

这个问题可能不是特定于语言的。

  • 是否可以创建一个真正的随机数?
  • 如果不是为什么随机数生成必须通过某种算法,为什么垃圾值不能作为随机数。
random
5个回答
19
投票

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

You can never be sure (来源:dilbert.com

在大多数应用程序中,您对随机数生成器的期望是生成均匀分布的数字序列。垃圾值不提供此特性。

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

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

cryptographically secure (pseudo-)random number generators试图隐藏用户级代码的随机数生成器的状态,也就是说,理想情况下,只有内核模式代码可以可行地预测下一个随机数。

然而,隔离的计算机系统(没有任何外部输入)是确定性有限状态机。也就是说,通过了解机器的当前状态,您始终可以预测下一个状态。因此,如果您的意思是软件系统“不可预测”,那么根据此定义,您不能使用确定性系统来生成“真正的随机性”。

还有另一种更具哲学性的不可预测性。即使您依赖外部输入(例如大气噪声或其他方式),它们真的难以预测吗?有人可能会说,我们生活在一个确定性的世界,就像一台数字计算机,一切都决心要发生;所以,没有随机性。我没有答案。


4
投票

通过“垃圾值”,我认为你的意思是未初始化的记忆。你不会得到良好的分布,更重要的是你会得到很多重复值的序列。连续获得数千个相同的数字对于大多数需要随机数的应用程序来说都是无用的。

对于一个数字是“真正的随机数”,它必须是非确定性的。而且因为几乎所有东西(可能)都是确定性的,所以实际上没有随机数这样的东西。大气噪声的混合可能是此时最接近的。


1
投票

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


1
投票

垃圾值是不可预测的,您不能对它们做任何假设。

如果你想要一个真正的随机数,你的算法必须涉及一些“真实世界”变量(例如,CPU温度,风扇速度,环境噪声......)。否则,您的“随机”值将是非常可预测的。


1
投票

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

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

当然,非常长的序列实际上可能与“真正随机”的数字无法区分。

可以使用“垃圾值”来为随机数生成器播种,但问题是“种子使用的值范围是多少?

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

© www.soinside.com 2019 - 2024. All rights reserved.