2009-09-20 41 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

計算機是確定性的,只能生成僞隨機數,除非它們依賴於一些外部隨機過程。

僞隨機數發生器形成一個序列,遲早會重複。

當然,非常長的序列實際上可能與'真正的隨機'數字沒有區別。

一個'垃圾值'可能被用來播種一個隨機數發生器,但問題是'種子使用了什麼樣的數值範圍?

它可能會引入可預測性,,因爲我們知道一些僞隨機數發生器產生相同的序列時,相同的種子。