2015-02-10 25 views
0

使用對參考該C代碼(源從http://en.wikipedia.org/wiki/Xorshift):xorshift128 + PRNG執行的w/o無符號長

uint64_t s[2]; 
uint64_t xorshift128plus(void) { 
    uint64_t x = s[0]; 
    uint64_t const y = s[1]; 
    s[0] = y; 
    x ^= x << 23; // a 
    x ^= x >> 17; // b 
    x ^= y^(y >> 26); // c 
    s[1] = x; 
    return x + y; 
} 

在保持隨機性性質方面的等價的Java代碼(除其他以下種子和返回值之間的不同映射):

long s[2]; 
long xorshift128plus(){ 
    long x = s[0]; 
    long y = s[1]; 
    s[0] = y; 
    x ^= x << 23; // a 
    x ^= x >>> 17; // b 
    x ^= y^(y >>> 26); // c 
    s[1] = x; 
    return x + y; 
} 
+1

它實際上看起來和我完全一樣。有什麼不同?顯然,忽略結果的簽名。 – harold 2015-02-10 20:32:20

+0

我只是想確認它們基本上是等價的。 – lgp 2015-02-10 20:57:50

+0

種子之間的映射返回值也是一樣的。 – harold 2015-02-10 21:22:21

回答