擬似乱数生成ルーチン 「無限階層法」


新開発の乱数で、次のような特徴があります。
  1. フリーソフトであり、修正BSDライセ ンス類似のライセンスに従って、再配布できるものとします。
  2. 基本的に、二次合同法   xn+1=xn*((xn<<2)+a)+b  mod  232   により乱数を発生させ、長周期で乱数性が良くなるような工夫をして、二次合同法にある規則性を消失させています。周期は、Cソースのパラメータを変更すれ ばいくらでも長くすることができます。
  3. 気体分子の衝突をイメージし、bitをかき混ぜるという観点から設計された乱数です。周期が発生するのは閉じた系だからであり、 外部の 無限の階層世界からの撹乱があれば、周期は発生しないだろうという観点から作りました。数学的な背景が乏しいので、正確な周期は不明です。
  4. 乱数性は統計テストで確かめられています。NIST Special Publication 800-22の乱数テストを、1回のテストに使うデータを106bit として、1000回のテストを行い、その1000回を1つのテストとしたものを、10回以上行いました。その結果、ほぼ2回に1回、全ての検定法でパスし ました。以下にある検定レポートは、検定をパスしたときのfinalAnalysisReportの1つです。また、Marsaglia博士の DIEHARD TEST の結果も掲載しました。
  5. 二次合同法のパラメータは、乱数生成と共に変化し、そのパラメータを定めるための方程式を出力された乱数からだけでは作れないの で、パラメータを推定できません。したがって、この乱数を用いて、ストリーム暗号が作成できます。
  6. 32bitの倍数の長さの配列を用いた初期化ルーチンを作ってありますから、任意の長さのパスワードのストリーム暗号が作成可能 です。
  7. 1つの乱数を生成するのに、32bit整数の乗算を平均で約1.1回行います。
  8. 乱数の生成速度はMersenne Twisterと比べて、Pentium4では若干遅いが、Pentium3,Athlonでは速いようです。ただし、コンパイラやコンパイル時の最適化 オプション、Cソースの行の入れ替えにより、乱数の生成速度は大きく異ります。
  9. ワーキングメモリは、650ワード程です。ただし、1ワードは32bit長とします。
  10. 大規模シミュレーションに使えます。以下に、モンテカルロ法による円周率の計算結果を掲載しました。 
下図は,連続して生成した2つの乱数の下位8ビットの組を、10000個プロットしたものです。規則性は現れません。

 RANSUU.GIF - 10,267BYTES

最初のページ に戻る