プログラミング: 2008年3月アーカイブ

とっても速い擬似乱数生成器。Xorshift RNGs - lucille development blog 辺りを参考に。周期も適当に長く取れるので、再現性が必要なゲームにいいかもね。データの動的生成にも使えるかな?

(function (namespace) {
/**
* Xorshift128 の新しいインスタンスを初期化します。
*
* @param Number x 種その1。
* @param Number y 種その2。
* @param Number z 種その3。
* @param Number w 種その4。
*/
namespace.Xorshift128 = function (x, y, z, w)
{
var u = void(0);
this.x = x === u ? 123456789 : 0 + x;
this.y = y === u ? 362436069 : 0 + y;
this.z = z === u ? 521288629 : 0 + z;
this.w = w === u ? 88675123 : 0 + w;

if ((this.x | this.y | this.z | this.w) == 0)
{
throw new Error("x, y, z, w 全部 0 は、らめ!");
}
}

/**
* 0 以上 1 未満の乱数を返します。
*
* @return Number 0 以上 1 未満の値。
*/
namespace.Xorshift128.prototype.next = function ()
{
return this.nextUInt32() / 4294967296;
}

/**
* 0 以上 4294967296 未満の乱数を返します。
*
* @return Number 0 以上 4294967296 未満の値。
*/
namespace.Xorshift128.prototype.nextUInt32 = function ()
{
var t = this.x ^ this.x << 11;
this.x = this.y;
this.y = this.z;
this.z = this.w;
this.w = (this.w ^ this.w >>> 19) ^ (t ^ t >>> 8);

return this.w >>> 0;
}
})(window);

///////////////////////////////////////////////
var xs = new Xorshift128();
xs.next();
xs.nextUInt32();

このアーカイブについて

このページには、2008年3月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2008年2月です。

次のアーカイブはプログラミング: 2008年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.12