数学を専攻してらっしゃる方からすると, 色々ツッコミどころ満載かと思いますがご容赦ください.
Xorshift128は, その名前の通り128bit(32bit)からなる内部状態をxor
演算とシフト演算によって更新することで乱数を生成しています.
まずは, 内部状態の更新を行列で表してみましょう. (以降の行列表現は全てベクトルに対して左側から作用させるものとします)
ビットだけ左シフトする演算(あるいは右シフトする演算)は行列を用いて次のように書けます.
また, xor
は上の加法として表現できます.
Xorshift128の内部状態をと表すことにします. をに更新する遷移行列(すなわち, を満たす)は, の小行列によるブロック分割によって
と書けます. ここで, をそれぞれとします.
さて, 本題であるの逆行列を考えることにしましょう. 先ほどと同様にの小行列によるブロック分割で考えると,
として表せそうです. 逆行列の性質を用いれば,
を満たすはずです. 従って,
の4本の式が立つことから, 各について解くと,
が得られました. 以上より,
が導出されます.