xorshiftジェネレータ:23、17、26が特別な理由
Xorshift Generators
xorshiftジェネレータは、擬似乱数を生成する最も広く使われているアルゴリズムの一つで、わずか数行のビット演算で数十億のデバイス上で動作しています。この記事では、xorshift32とxorshift64の仕組みを解説し、なぜ13、17、5のような特定のシフト量が「最大」となるのかを探ります。最大のトリプレットは、ゼロ以外のすべての値を生成でき、その数は32ビット版でわずか162個です。また、Marsagliaの論文の誤りや、2回のシフトでは不十分な理由についても触れます。
これらの定数は任意に見えるかもしれませんが、決してランダムではありません。なぜなら、それらは問題の奥深くにある何かと、その解決方法を常に明らかにしているからです。
HNでの議論
31- larsbrinkhoff
PDP-10用のXorshift-36。Sebastiano Vignaの助けを借りた。
- jabl
数年前、GFortranコンパイラ用にxoshiro256**を実装しました。以前はMarsagliaのKISSジェネレータを使っていましたが、それは悪くはなかったものの、TESTU1などのテストではもはや最先端ではないかもしれません。さらに、xoshiro256**は複数のスレッドで並列に使えます。Fortranの組み込みAPIの制限を回避するには、少し巧妙なハックが必要でした。
- delduca
Luaの乱数をこれに置き換えました。これについてここに投稿しました: https://nullonerror.org/2025/08/02/replacing-lua-s-math-rand...
- YZF
https://en.wikipedia.org/wiki/Linear-feedback_shift_register
- saithound
そう、Xorshift、21世紀のRANDU[1]だ[2]。
adrian_bが2021年に説明したように、より優れた非CSジェネレータの実用的なユースケースはない[3]。
[1] https://en.wikipedia.org/wiki/RANDU