使用此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;
}
答案 0 :(得分:1)
我在DSI实用程序中从xorshift系列分发了完整的PRNG实现:http://dsiutils.di.unimi.it/docs/it/unimi/dsi/util/package-summary.html