當前位置:編程學習大全網 - 腳本源碼 - 真隨機數的定義是什麽

真隨機數的定義是什麽

真隨機數壹般都是相對於數組而言,真隨機數就是沒有規律的數,妳不能預見其下壹個數值是多少,真隨機數是個詭異的東西,壹個源於物理現象得到的真隨機數組壹經公開就不再是真隨機數組了,因為得到數組的人都可以知道下壹個數是什麽。

以往大家有個***識,就是計算機不能產生真隨機數,其實這是對計算機認識不夠造成的,計算機有多種產生隨機數的方法,這裏僅舉壹例:

最常用的C語言中有些函數的特點是每次調用它執行時間不壹樣,也就是執行時間有壹定的隨機性,利用此特性我們可以得到所需要的隨機數。這些函數有Beep(0,0),SetWindowText(NULL),MessageBeep(MB_ICONQUESTION)等,其它語言的函數也有類似情況是肯定的。

我們只要連續調用此類函數,監測其執行時間,處理執行時間就可以達到目的。但函數的執行時間都是很短暫的,用壹般測量時間的方法都太粗糙了,必須自己設計度量方法。每個計算機都有其工作頻率稱為主頻,與之相對應的是時鐘周期,做壹個函數讀取計算機運行以來的時鐘周期,用函數運行時計算機所經歷的周期數來度量時間;測量壹下當前的周期數,讓函數運行,再測量壹下當前的周期數,兩個周期數的差值再減去壹個本底值就代表了函數運行時間,如此做多個循環就可以大量采集運行時間了,處理運行時間數組得到隨機數組。

且看實驗數據:

Beep(0,0)函數的運行時間115636,114283,114899,115030,114488,114350,114866,115132,114317,114757

放在字數組裏則有  50100,48747,49363,49494,48952,48814,49330,49596,48781,49221

放在字節數組裏則有 180,107,211,86,56,174,178,188,141,69

顯然放到16位的字數組裏效果不好,這是因為函數運行時間只比16位的最大值大0.7倍左右。但放到8位數組裏效果不錯,而其它位數的數據由此組合即可。

通過生成大量數據的檢測還沒有發現周期現象,也就是從不重復的,數組長度大時所有元素等概率出現隨機性良好,所以它們是真隨機數。

這裏展示了程序連續生成大隨機數:/s/1Dphz

  • 上一篇:simplicity 這個英語單詞 用諧音怎麽讀?
  • 下一篇:機油格和柴油格怎麽區分呢?
  • copyright 2024編程學習大全網