わどるDAILY

インターネット狂人会

SDXの乱数について

やたら長かった調査の末、SDXの擬似乱数が解明できたことを知らせます。
詳細とかはsdxtasのwikiに書いてます:
擬似乱数の生成方法 - 星のカービィSDX TAS・タイムアタックwiki

この記事では上記のページに残すほどでもない余談とかを取り扱います。
以下の文章を読む前に上記リンクを読んだ方が分かりやすいかと思います(無駄に敷居を上げる)
私自身もあまり詳しくない分野なのでツッコミどころも多いかと思います(結局敷居を下げる)

擬似乱数としての性能

乱数(乱数列)とは次に来る値が全く予想出来ないものであり、疑似乱数はその乱数に出来る限り近いものを目指して作られています。
優れた擬似乱数アルゴリズムの基準としては

  • 偏りが少ない・ばらつきが良い
  • 乱数列の周期が長い
  • 処理が高速で出来る

などがあります。

SDXの擬似乱数はビット演算のみで生成されていますが高速なのかは不明です。
風の強いマップなど毎F消費してますが処理に負担がかかることは少ないです。

周期については乱数変数が16bitであるなか、65534回で乱数列が1周します。
つまり2つを除いた全ての乱数を通ります。
すごいですね。理論は知りませんが。

上は周期分の乱数を全てプロットしたものですが、これを撮るまでに数回クラッシュしてます

なお、当時世間的に使われていた疑似乱数アルゴリズムには線形合同法・線形帰還シフトレジスタなどがありますが、
SDXの擬似乱数は後者を応用したものと言えます。

今後の課題

理想の乱数を出したいという動機で研究を進めましたが、ここにたどり着くまでは本当に長かったです。
そしてここからも長くなります。
ランダムな行動と乱数列を紐づけなければなりませんから・・・
つづく。