見出し画像

XorShift シード値による疑似乱数生成

function xs32(s){
  this.s= s || new Date().getTime(),
  this.x= this.s,
  this.n= function(){
    this.x^=this.x<<13;
    this.x^=this.x>>17;
    this.x^=this.x<<15;
    return this.x
  },
  this.r= function(min,max){
    return min+Math.abs(this.n()%(max+1-min));
  }
}
var r1=new xs32(123456789);
for (var i=10; i--;){
  WScript.echo(r1.r(1,256));
}

JavaScript のビット演算は符号なし32ビットなので32ビットの式を使う

シード値を用いた疑似乱数は同一シード値で同じ乱数が発生するのでマップ生成に用いた場合常に同じマップが生成される

s:seed シード値

x:現在の値

n:next 次の乱数発生

r:range 最小値、最大値を指定した乱数発生

ビット演算による疑似乱数は0を使うことができないので、通常の0~1の乱数を発生させるのには向いていない

この記事が気に入ったらサポートをしてみませんか?