這是個(gè)很無(wú)聊的測(cè)試
- 起因
//生成個(gè)隨機(jī)數(shù)
Math.random();
//生成整數(shù)n到m
Math.round(Math.random() * (m - n) + n);
Math.floor(Math.random() * (m - n + 1) + n);
當(dāng)然也可以用 Math.ceil()注服,
- 但我主要糾結(jié)的是 四舍五入 和 向下/上取整 在生成的隨機(jī)整數(shù)的概率上的差別。
- 我覺(jué)得 四舍五入 應(yīng)該比 向下/上取整 所生成的概率更平均.
- 是不是這樣呢?
話不多說(shuō),開(kāi)工
//分別用兩種方法生成一組n到m的隨機(jī)數(shù),并放入數(shù)組
var n = 3,m = 8;
for(var i = 0, arr1 = [], arr2 = []; i < 1000000; i++) {
arr1[i] = Math.round(Math.random() * (m - n) + n);
arr2[i] = Math.floor(Math.random() * (m - n + 1) + n);
}
//封裝個(gè)函數(shù),統(tǒng)計(jì)n到m各整數(shù)出現(xiàn)的次數(shù)
function cNums(arr, n) {
for(var i = 0, j = 0; i < arr.length; i++) {
if(arr[i] == n) {j++;}
}return j;
}
//再封裝一個(gè)測(cè)試函數(shù)
function csgl(arr) {
for(var i = n; i <= m; i++) {
var cs = cNums(arr, i);
document.write(i + "出現(xiàn)了" + cs + "次<br />");
}
}
//ok,開(kāi)始測(cè)試,F5.......
document.write("Math.round<br />");
csgl(arr1);
document.write("Math.floor<br />");
csgl(arr2);
出乎我的意料,結(jié)果和我想的 完全相反:
- 刷新了十多次,
- 用向下取整所得的概率統(tǒng)計(jì)都非常平均的在166000左右,
- 而四舍五入所得的概率統(tǒng)計(jì)卻起伏不定,
Math.round
3出現(xiàn)了100239次
4出現(xiàn)了199372次
5出現(xiàn)了200600次
6出現(xiàn)了199740次
7出現(xiàn)了200185次
8出現(xiàn)了99864次
Math.floor
3出現(xiàn)了165825次
4出現(xiàn)了166928次
5出現(xiàn)了167070次
6出現(xiàn)了166796次
7出現(xiàn)了166612次
8出現(xiàn)了166769次
這是為什么呢?