2017-02-16 82 views
9

我正在研究一個關於隨機數的大型學校項目,但我無法找到Math.random()的期限。我安裝了7.0.800.15版本,我正在使用Windows 10計算機。我試圖確定與一個簡單的程序,節省了第一值的週期:Java Math.random期間

double num = Math.random(); 

在一個數組,然後循環,直到它再次找到相同的值連續,因此會期已經過去了,但沒有結果,這段時間太長了。

所以我的問題是:我的版本是Math.random()的期限是多少? 或者:有沒有一種方法可以使用簡單的程序來確定時間段?

編輯:帶走指向一個關於JavaScript網頁的來源,這是不相關的

+0

你是指什麼時期?直到返回相同結果的呼叫數量? – Izruo

+0

是關於Java或Javascript的問題?該鏈接正在談論Javascript。 – Kayaman

+1

@Izruo按期我的意思是,直到相同的數字開始重複的電話數 –

回答

2

只需添加其他答案並對隨機數生成器進行更廣泛的評論,然後編寫一個程序以確定期限,請注意Birthday ParadoxGambler's Fallacy。如果您生成一些值x,則下一個數字與其他任何數字一樣可能爲x,並且在您可能重複之前需要生成的數字實際上非常小(這意味着您可以原則上,在這段時間結束之前開始看到一些重複的內容,這使編寫程序來測試它變得複雜)。

的概率高達50%左右can be approximated重複的由sqrt(2m * p(n))其中p(n)的概率是你想計算和m是選擇的數量的可能性。對於32位整數,sqrt(2m * p(n)) = sqrt(2 * 2^32 * 0.5) = sqrt(2^32) = 65,536。你有它 - 一旦你產生了65536個數字,你就有50-50的機會產生了重複。

一旦生成2^32 + 1值,則Pigeonhole Principle指定您必須已經產生至少一個重複(假設,當然,你正在產生一個32位的數字)。

您可能也有興趣this question關於是否可以指望隨機數是唯一的。