xorshiftジェネレータ:23、17、26が特別な理由

Xorshift Generators

xorshiftジェネレータ:23、17、26が特別な理由

xorshiftジェネレータは、擬似乱数を生成する最も広く使われているアルゴリズムの一つで、わずか数行のビット演算で数十億のデバイス上で動作しています。この記事では、xorshift32とxorshift64の仕組みを解説し、なぜ13、17、5のような特定のシフト量が「最大」となるのかを探ります。最大のトリプレットは、ゼロ以外のすべての値を生成でき、その数は32ビット版でわずか162個です。また、Marsagliaの論文の誤りや、2回のシフトでは不十分な理由についても触れます。

これらの定数は任意に見えるかもしれませんが、決してランダムではありません。なぜなら、それらは問題の奥深くにある何かと、その解決方法を常に明らかにしているからです。
  1. larsbrinkhoff

    PDP-10用のXorshift-36。Sebastiano Vignaの助けを借りた。

    https://github.com/larsbrinkhoff/xoroshiro-36

  2. jabl

    数年前、GFortranコンパイラ用にxoshiro256**を実装しました。以前はMarsagliaのKISSジェネレータを使っていましたが、それは悪くはなかったものの、TESTU1などのテストではもはや最先端ではないかもしれません。さらに、xoshiro256**は複数のスレッドで並列に使えます。Fortranの組み込みAPIの制限を回避するには、少し巧妙なハックが必要でした。

  3. delduca

    Luaの乱数をこれに置き換えました。これについてここに投稿しました: https://nullonerror.org/2025/08/02/replacing-lua-s-math-rand...

  4. YZF

    https://en.wikipedia.org/wiki/Linear-feedback_shift_register

  5. saithound

    そう、Xorshift、21世紀のRANDU[1]だ[2]。

    adrian_bが2021年に説明したように、より優れた非CSジェネレータの実用的なユースケースはない[3]。

    [1] https://en.wikipedia.org/wiki/RANDU

    [2] https://arxiv.org/abs/1908.10020

    [3] https://news.ycombinator.com/item?id=28886698

この日のほかの記事

2026-08-15