Math.round與Math.floor在取隨機(jī)數(shù)時(shí)的區(qū)別

這是個(gè)很無聊的測試

  • 起因
//生成個(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ù)的概率上的差別。
  • 我覺得 四舍五入 應(yīng)該比 向下/上取整 所生成的概率更平均.
  • 是不是這樣呢?
    話不多說,開工

//分別用兩種方法生成一組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è)測試函數(shù)
function csgl(arr) {
    for(var i = n; i <= m; i++) {
        var cs = cNums(arr, i);
        document.write(i + "出現(xiàn)了" + cs + "次<br />");
    }
}
//ok,開始測試,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次


這是為什么呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 程莯莯給我打電話的那一天,正是陰雨綿綿的天氣,我聽著她在電話里哽咽的聲音,我就知道,我以前擔(dān)心的事情還是發(fā)生了。 ...
    莯玖一閱讀 401評論 1 2
  • 青峰層疊追云起, 點(diǎn)點(diǎn)花香沐雨煙。 朝起曙光照蒼田, 雁過南山越九天。
    書海沉香閱讀 251評論 0 2

友情鏈接更多精彩內(nèi)容