有一種論調說是計算機是有限狀態機不能生成隨機數,實際上我們找不到這樣嚴密的東西。在這裡我們告訴不相信計算機能生成隨機數的人乙個方法如何從計算機得到隨機數。這個方法不能高效的生成隨機數,用它旨在說明問題,實際方法多得是但多是不太簡單,說起來囉嗦。
隨便使用一種語言編個小程式即可得到隨機數。找個小的可執行程式a(乙個空的可執行檔案),我們用編的程式去連續呼叫程式a,並且用現成的時間函式來計量程式a的執行時間(時間單位用毫秒),將執行時間做成乙個陣列,得到a1,a2,...,an,共n個資料,讓後計算它們的平均值p,然後讓每個陣列成員依次減p,得到另乙個陣列,做乙個統計凡是大於或等於0的計乙個數1,凡是小於零的計乙個0,這樣得到的由0和1組成的陣列可以作成了乙個 n位的二進位制隨機數。一直算下去你就會發現,根本無法**下乙個數是1還是0,而隨機數就這樣產生了。
不相信的人可以自己實踐一下,很簡單的。
效率較高的隨機數生成方式一例:
採用高精度的時間戳函式,可以輕而易舉的獲得隨機數。例如測試乙個函式的執行時間得到:
3.254924718072082毫秒
4.3321148358227468毫秒
2.61374001444418166毫秒
9.5216012090908571毫秒
..............................
擷取上面變化資料中段,就可以得到隨機數。
猜計算機隨機數
val random.randint 0,99 ra range 0,99 while true num eval input enter the num if num in ra if numthe number is a little lower than that elif num val p...
C 中生成的隨機數為什麼不隨機?
from 隨機數生成方法可以說是任何程式語言必備的功能,它的重要性不言而言,在c 中我們通常使用random類生成隨機數,在一些場景下,我卻發現random生成的隨機數並不可靠,在下面的例子中我們通過迴圈隨機生成5個隨機數 for int i 0 i 5 i 這段 執行後的結果如下所示 214040...
C 中生成的隨機數為什麼不隨機?
隨機數生成方法可以說是任何程式語言必備的功能,它的重要性不言而言,在c 中我們通常使用random類生成隨機數,在一些場景下,我卻發現random生成的隨機數並不可靠,在下面的例子中我們通過迴圈隨機生成5個隨機數 for int i 0 i 5 i 這段 執行後的結果如下所示 2140400647 ...