5

乱数が次のように生成される多くのコードを見てきました

// random integers in the interval [1, 10]
Math.floor(Math.random()*10 + 1)

とにかく何かが足りない気がします。もっと簡潔な方法を使わないのはなぜですか

Math.ceil(Math.random()*10);

?

ランダム性をテストしようとしましたが、これまでのところ正しいようです。

実際、その後のコードは

// will generate random integers from 1 to 4
var frequencies = [ 0, 0, 0, 0, 0 ]; // not using the first place
var randomNumber;
for ( var i = 0; i < 1*1000*1000; ++i ) {
   randomNumber = Math.ceil(Math.random()*4);
   frequencies[randomNumber]++;
}

for ( var i = 1; i <= 4; ++i ) {
   console.log(i +": "+ frequencies[i]);
}

プリントアウト

1: 250103
2: 250161
3: 250163
4: 249573

私は何が欠けていますか?

Quick OT: 周波数を宣言して初期化するもっと簡潔な方法はありますか? つまりfrequencies[5] = { 0 };、C ++のように...

4

3 に答える 3

5

Math.floor()の範囲のため、ここでは が推奨されますMath.random()

たとえばMath.random() * 10、 の範囲を指定し[0, 10)ます。Math.floor()you を使用すると、 の値が得られることはありませ10んが、が得られるMath.ceil() 場合があり0ます。

于 2013-04-05T09:56:07.867 に答える