java中的xorshift128 + PRNG实现没有unsigned long

时间:2015-02-10 20:27:15

标签: java prng

使用此C代码作为参考(来自http://en.wikipedia.org/wiki/Xorshift):

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 个答案:

答案 0 :(得分:1)

我在DSI实用程序中从xorshift系列分发了完整的PRNG实现:http://dsiutils.di.unimi.it/docs/it/unimi/dsi/util/package-summary.html