私は良い擬似乱数ジェネレータ(PRNG)が必要ですが、現在の技術水準はxorshift128 +アルゴリズムのようです。残念ながら、私は2つの異なるバージョンを発見しました。ウィキペディアで1:としてXorshiftショー:xorshift128 +アルゴリズムの実際の定義は何ですか?
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
s[1] = x^y^(x >> 17)^(y >> 26); // b, c
return s[1] + y;
}
まっすぐ前方に十分なようです。さらに、編集ログには、「Vigna」という名前のユーザー(このコードスニペットはxorshift128 +:Further scramblings of Marsaglia’s xorshift generatorsの論文の著者である「Sebastiano Vigna」)によって追加されたことが示されています。残念ながら、その論文の実装は若干異なります。
uint64_t next(void) {
uint64_t s1 = s[0];
const uint64_t s0 = s[1];
s[0] = s0;
s1 ^= s1 << 23; // a
s[1] = s1^s0^(s1 >> 18)^(s0 >> 5); // b, c
return s[1] + s0;
}
は別に、いくつかの異なった名前から、これら二つのスニペットが最後の二つのシフトを除いて同一です。 Wikipediaのバージョンでは、これらのシフトは17と26で、紙のシフトは18と5である。
"正しい"アルゴリズムは誰にも分かりますか?違いはありますか?これは明らかに広く使用されているアルゴリズムですが、どのバージョンが使用されていますか?
[このセバスヴィーニャパブリックコメント](http://v8project.blogspot.com/2015/12/theres-mathrandom-and-then- theres.html?showComment = 1450389868643#c2004131565745698275)を参照してください。両方のアルゴリズムが「正しい」場合は、著者に連絡して、彼に希望のバージョンがあるかどうか尋ねることができます。 – Blastfurnace
@blastfurnace - ありがとう、私は必要なもののように見える。 –
@Blastfurnace:このコメントは、主に理論的だと言っていますが、彼の好みをかなり明確にするようです。 –