コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
あまさとしおん ◆mzDKTVUAtwqE
2018/6/20 19:08
情報交換
プチコン向け線形合同法
「質が良い定数の設定」がネットには上がっていますが割る数に「2^32-1や2^31」を使うものが多く、プチコンの仕様上、使用不可能です。
(MODは左右どちらも整数型を超える数を受け付けない)
そこで、割る数に素数である2^19-1(524287)を使った上で、良いAとBを知りたいのです

Xn+1=A*Xn+B MOD 524287
の良いAとB

コメント

アバター
あまさとしおん 2018/6/20 19:12 ◆mzDKTVUAtwqE
あれまって、524287だとまずかったりする??()
アバター
あまさとしおん 2018/6/20 19:15 ◆mzDKTVUAtwqE
M=2^20-1に訂正します
アバター
あまさとしおん 2018/6/20 19:21 ◆mzDKTVUAtwqE
かなり難易度が高いなぁ・・・
MODが32bitしか使えないのはプチコンのダメ仕様の1つに決定だな・・・
アバター
あまさとしおん 2018/6/20 19:27 ◆mzDKTVUAtwqE
M=2^18-1
A=3*7*19*73+1
ひとつの案
アバター
あまさとしおん 2018/6/20 19:28 ◆mzDKTVUAtwqE
嘘。変数を間違えました
アバター
あまさとしおん 2018/6/20 19:30 ◆mzDKTVUAtwqE
M=2^18-1
A=3*7*19*73+1
B=5

変数Bを忘れてあせったけどコレでどうだ
アバター
あまさとしおん 2018/6/20 19:33 ◆mzDKTVUAtwqE
>>>何かがおかしくなった<<<
負の数が出てくる
アバター
あまさとしおん 2018/6/20 19:37 ◆mzDKTVUAtwqE
負数が出る上に周期が目に見えるくらい短い
何が起きたんだ??
アバター
あまさとしおん 2018/6/20 19:38 ◆mzDKTVUAtwqE
訂正:周期が短いのはBを忘れていたためでした。
負数は原因不明です
アバター
おちゃめ 2018/6/20 22:26 ◆jH1opV6FnGyx
線形合同法は様々な欠点があるので「質の良さ」を求めるならばxorshfit等の別の擬似乱数がオススメです。
線形合同法の欠点を理解した上で「少しでも質を高めたい」というのであれば周期を増やすのが最低条件でしょう。
ご存じとは思いますが、線形合同法は設定値によって周期が変わります。MODの除数(右の値)から1を引いたものが理論上の最大周期となります。
したがって、その理論上の最大周期となる値を設定すれば良いでしょう。

適当に X=(X*2347+7537) MOD 524287 とかしてみましたが、どうでしょうか?
すべての値が素数であり、周期は理論値の524286となっています。
この乱数の質が良いかどうか(許容範囲かどうか)はご自身の目で確かめてもらうのが一番でしょう。


話は変わりますが、プチコンmkIIでは32bit固定小数点型のみを採用のため「絶対値が524288未満の数しか扱えない」という仕様になっていたため線形合同法では普通に作ったら周期は数千しか得ることができず実用になりません。
そこで私は別途カウンタを付けてそれを独立動作させることで擬似的に周期を増やすことで周期は1600万以上となり、ゲーム程度であれば実用に耐えうる速度重視の擬似乱数を作ることができました。
http://ochameclub.web.fc2.com/petitcom/rnd.htm


プチコンmkIIでは乱数列の初期化ができないため敵キャラに乱数を使いつつも毎プレイ同じ動きをさせるということは標準のRND関数ではできませんでした。(リプレイ機能を付けるにもこれができないと無理)
そこで、私は上記のような擬似乱数を作ったわけでこれによって様々なゲームが作れるようになりました。
擬似乱数のプログラムが小さいため1画面プログラムでステージ自動生成のゲーム「JUMPING ISLAND」を作ることが可能となりました。(自動生成といっても戦略性の高いものを生成可能なアルゴリズムになっている)
http://ochameclub.web.fc2.com/petitcom/1page.htm#jump

ちなみにJUMPING ISLANDに使われている技術についてはプチコンmkII用の講座で詳しく書いているので興味ある方はご覧になってください。
http://ochameclub.web.fc2.com/petitcom/p007_2.htm

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -