javascript乱数生成方法のまとめ

4092 ワード

今日またネット友達から、JavaScriptはどのように指定範囲の数値乱数を生成しますか?Math.random()この方法はご存知の通り、乱数を生成するためのものです.しかし、一般的な参考マニュアルでは、この方法で指定された範囲内の乱数を生成する方法は説明されていません.今回は、Math.random()と、それを使って指定範囲内の乱数を生成する方法を詳しく紹介します.
基礎教程はこちらをご覧ください.
//www.jb 51.net/w 3 school/js/js ref_ラドドm.httm
教程を見たら、Math.randomの方法の基本的な使い方が分かります.
parseInt()、Math.flor()またはMath.ceeir()を利用して四捨五入処理を行う.
Math.random()を直接使用する方法を見ましたが、1より小さい数が生成されていますので、

Math.random()*5
得られた結果は5以下の乱数であった.私たちは通常0から5の間の整数を望んでいます.だから私たちは得られた結果を四捨五入して処理して、私たちが期待する整数を得る必要があります.parseInt()、Math.flor()とMath.ceir()はいずれも四捨五入の役割を果たします.

var randomNum = Math.random()*5;
alert(randomNum); // 2.9045290905811183 
alert(parseInt(randomNum,10)); // 2
alert(Math.floor(randomNum)); // 2
alert(Math.ceil(randomNum)); // 3
テストコードで見られますが、パースInt()とMath.flor()の効果は同じです.下の整数部分を取ります.したがって、parseInt(Math.random()*5,10)とMath.flook(Math.randm()*5)は、生成された0-4の間の乱数であり、Math.ceeir(Math.randowm()*5)は、生成された1-5の間の乱数である.
指定範囲の数値乱数を生成
したがって、1から任意の値の乱数を生成したい場合、数式はこのようになります.

// max -       
parseInt(Math.random()*max,10)+1;
Math.floor(Math.random()*max)+1;
Math.ceil(Math.random()*max);
0から任意の値の乱数を生成したい場合、数式はこのようになります.

// max -       
parseInt(Math.random()*(max+1),10);
Math.floor(Math.random()*(max+1));
任意の値から任意の値までの乱数を生成したい場合、数式はこのようになります.

// max -       
// min -        
parseInt(Math.random()*(max-min+1)+min,10);
Math.floor(Math.random()*(max-min+1)+min);
次に、javascriptが乱数を生成する他の方法を見てみましょう.
1.内蔵の乱数発生方法を使用する:(先ほど説明しましたが、ここで簡単に説明します)

Math.random(); //       0 1      。
Math.floor(Math.random()*10+1); //1-10
Math.floor(Math.random()*24);//0-23 
2.時間に基づいて、乱数も生成できます.

   var now=new Date(); 
  
var number = now.getSeconds(); // 0 59 。

var now=new Date();
var number = now.getSeconds()%43; // 0 42 。

3.かなり優秀な乱数発生器プログラムで、多くの分野に応用できます.

<!--
// The Central Randomizer 1.3 (C) 1997 by Paul Houle ([email protected])
// See: http://www.msc.cornell.edu/~houle/javascript/randomizer.html 
rnd.today=new Date();
rnd.seed=rnd.today.getTime();
function rnd() {
    rnd.seed = (rnd.seed*9301+49297) % 233280;
    return rnd.seed/(233280.0);
};
function rand(number) {
    return Math.ceil(rnd()*number);
};
// end central randomizer. -->

具体的な例を2つ見てみましょう.
第一の方法はMath.randowm法を書き換えることによって実現され、第二の方法は一つのCから実現され、いずれもプログラム目的を実現することができる.
実例一:

  
var native_random = Math.random;
Math.random = function(min, max, exact) {
	if (arguments.length === 0) 
	{
		return native_random();
	} 
	else if (arguments.length === 1) 
	{
		max = min;
		min = 0;
	}
	var range = min + (native_random()*(max - min));
	return exact === void(0) ? Math.round(range) : range.toFixed(exact);
};
document.write(Math.random());
document.write('<br />');
document.write(Math.random(10));
document.write('<br />');
document.write(Math.random(3,10));
document.write('<br />');
document.write(Math.random(2,10,4));
実例二:


var random = (function(){
	var high = 1, low = 1 ^ 0x49616E42;
	var shuffle = function(seed){
		high = seed;
		low = seed ^ 0x49616E42;
	}
	
	return function(){
  	var a = new Date()-0
   	shuffle(a);
  	high = (high << 16) + (high >> 16);
  	high += low;
  		low += high;
   	return high;
 	}
})();
 
alert( random() );
はい、これらの例を通して、皆さんはjavascriptに対して乱数を生成します.