2014-01-10 56 views
0

我正在使用node.js客戶端應用程序來模糊遠程服務器。Math.random vs其他隨機算法

在node.js客戶端中使用Math.random時,我可以〜100%的時間使遠程服務器崩潰。不過,我已經嘗試了一些確定性的種子隨機數生成器,但它們都無法使其崩潰。

我懷疑它是由於Math.random或我測試過的種子發生器的特性造成的。

這是種子發生器我試過之一:

var x = 123456789, y = 362436069, z = 521288629, w = 88675123; 
function random() { // See http://stackoverflow.com/a/6275875 
    var t; 
    t = x^(x << 11); 
    x = y; y = z; z = w; 
    return (w = w^(w >> 19)^(t^(t >> 8)))/(4294967296/2); 
} 

以何種方式將輸出是不同的Math.random()?另外,爲什麼2^32,4294967296需要除以2?

+3

'Math.random'崩潰服務器?你確定還有其他一些問題 –

+0

@WouterHuysentruit我知道,但要調試服務器,我最好喜歡確定性測試用例。因此試圖確定性的「隨機」數字。 – Max

+1

我幾乎可以肯定,它不是生成器內部的代碼會導致服務器崩潰,它會影響到其他代碼的返回值。所以一個簡單的for循環,迭代0到1.0之間的所有可能的值應該足以使其崩潰。 –

回答

0

輸出與Math.random()有什麼不同?

Math.random使用隱式引擎特定算法,該算法沒有種子能力,而您的實現與平臺無關且明確播種。

另外,爲什麼2^32,4294967296需要除以2?

它用於確保2的倍數,所以隨機數發生器不會在奇數上失效。

參考