再現性のある疑似乱数生成

 疑似乱数とは、算術処理によって得られる乱数のことで、サイコロを振って出る目とは違い、そのアルゴリズムと初期値が分かれば次に出現する数を予測することが可能です。

 JavaScriptには、Math.random()という0以上1未満の小数を返す関数が用意されています。一方C言語では、疑似乱数を発生させるrand関数と、rand関数の初期値を指定するsrand関数が用意され、同じ初期値を指定すれば何度でも同じ乱数列を得ることができるという利点があります。

 そこで、C言語のライブラリで使われているrand関数、srand関数と同じ動作をする関数を作成しました。

 ちなみにrand関数には線形合同法(漸化式 xn = axn - 1 + c (mod m) により与えられる)という疑似乱数アルゴリズムが使われています。

サンプル

 これは乱数をそのまま表示するサンプルです。「乱数生成」をクリックすると乱数(0〜32767の整数値)が表示され、初期値に整数値を入力して「初期化」をクリックすると、入力値を初期値に設定して初期化します。

 初期値を同じ値にして何度も「乱数生成」をクリックすると、毎回同じ順番の乱数列が出現します。

初期値:

出力:

コード

 JSファイルはjswh23.jsです。初期値はlongRandSeed、漸化式 xn = axn - 1 + c (mod m) のa, cはそれぞれrand関数内のa, cに相当します。これらの値にはVisual C++でコンパイルしたときのrand関数と同じ値を適用しましたが、適当な整数値に書き換えて使用することもできます。

乱数の生成
書式:rand()
戻り値:乱数(0〜32767の整数値)
初期値の設定
書式:UTF8toUTF16(number)
number = 整数値
戻り値:なし
動作確認ブラウザ [説明]
Internet Explorer 6.0 Firefox 1.0 Netscape 7.1 Opera 7.5