強火で進め

このブログではプログラム関連の記事を中心に書いてます。

JavaScriptで疑似乱数生成法のXorshiftを実装してみた

JavaScriptでは整数が符号付き32bitで有るためにマイナスの値が発生する事が有ります。

JavaScriptで使える乱数(Math.random)は希望する乱数の種が指定出来ません。
その為、常に同じパターンの乱数を順番に欲しい様な場面には使えません。

という事でXorshiftをJavaScriptで実装してみました。

xors = {
  x: 123456789,
  y: 362436069,
  z: 521288629,
  w: 88675123
};

xors.seed = function(s) {
  xors.w = s;
}
xors.rand = function() {
  var t = xors.x ^ (xors.x << 11);
  xors.x = xors.y;
  xors.y = xors.z;
  xors.z = xors.w;
  return xors.w = (xors.w^(xors.w>>>19))^(t^(t>>>8));
}

乱数の種を設定する場合はこの様に記述、

xors.seed(123)

乱数を取得するのはこの様に記述します。

alert(xors.rand());

関連情報

Xorshift - Wikipedia
http://ja.wikipedia.org/wiki/Xorshift

(2016/01/07 追記)

Google Chromeが採用した、擬似乱数生成アルゴリズム「xorshift」の数理 – びりあるの研究ノート
https://blog.visvirial.com/articles/575

(追記ここまで)