2011-02-14 53 views
0

與ActionScript 3.0文檔:Math.random()代碼來源?

全局函數>的Math.random()

返回一個僞隨機數n, 其中0 < = N < 1.號碼返回 以未公開的方式計算,並且是「僞隨機」,因爲 的計算不可避免地含有一些非隨機性元素。

我感興趣的閱讀源代碼的Math.random(),並假設它在其他基於C的語言一樣AS3一樣。是否可以觀看?

任何人都可以解釋哪些元素使代碼是僞隨機的,爲什麼?是不可能創建一個返回一個真正的隨機值的函數?

+0

不同的ActionScript實現可能有不同(可能是):Windows Flash播放器可能使用一種實現,Mac Flash播放器可能使用另一種實現,而Scaleform GFx可能使用另一種實現。 – 2011-02-14 17:10:43

回答

2

有一大堆Pseudo Random Generator功能 - 最常見的一種,如果你不是做高結尾加密可能是線性一致的 - 請參閱wiki以獲取描述和實現代碼的鏈接。

0

如果我沒有記錯的話,很多都依賴於系統時間,因爲它變化得太快了。 如果你點擊相同的sydtem時間,就可以得到相同的隨機數。 至於真正的隨機,不可能,在沒有設置的計算機上沒有位。你可以說,如果你進入某些內存空間並且抓取了某些內容,那麼這將是隨機的,但這些都像時間一樣是確定性的。

+0

不完全相同,如果您從相同的「種子」開始,PRN將始終生成相同的數字序列。獲得一個新的隨機種子的一種常見方法是使用系統時間。但是,如果您過快地爲發電機提供電源,則每秒僅更改一次的時間值保持不變。 rand() – 2011-02-14 22:54:56

+0

這不是一個常見的錯誤嗎?也許我錯過了一些東西,但是你已經和我一樣說了一些細節。 – AaronM 2011-02-15 12:33:54

1

獲得真正的隨機數,你可以使用一些網絡服務,如random.org
它採用隨機從大氣噪聲