使い方をぐぐってやっと意味が分かってきた。
初期statusは専用の生成器で出力するんだね。
で、その値がサンプルコードと同じと。MTのときもそうじゃなかったっけ。
適正な値だから変にいじれないってことなんかな。でも乱数に最下位bitを使っちゃうのはあかんかったのでは。
のでは、とか言ってるけどそのやばさを説明されて始めて知った人ですが。
ビルドの方式が間違ってたようで、最初からやりなおしたら動くようになりました。
チェックがてら出力される擬似乱数とstatus[3]の最下位bitが等しいことを確認。
処理も追えるようになったのでここから細かく見ていける。
既に大体はわかってるんだけども、ここに処理順をまとめて完了にしたいな。
初期化処理を電卓で確認しながら追おうとしたら
>>30を>>0x30で計算してしまってめちゃくちゃ時間かかった。
上位2bitを抽出するだけなのに電卓だと計算できない。
理屈がわかって答えもわかってたのに電卓の使い方がわかってなかったオチ。
で、周期証明関数ってのがあるんだけど、あれ何?
statusの4つの要素全てが0だったら"tiny"になるっていう操作の意味がわからない。
まさかこの操作でALL0のstatusを破棄してるから2^127 "-1"ですよとかじゃないですよね。
そもそも乱数列を生成し始めるのその後だし。
ってぐぐったら出てきたわ。初期値0を回避するためだって。でたらめで言ったつもりがあってた。
え?いや、そうか?あってるかほんとに?
MT著者の論文だけど僕が読めてないんだよな。MTにも0回避する工程あったっけ?