如果我们使用 Math.round,则该数字会四舍五入到最接近的整数,并且 Math.random 函数为我们提供了一个均匀分布,这意味着我们应该得到大致相同数量的不同舍入数字和足够的代数。但是,如果您运行下面的代码,则会获得第一个和最后一个元素的尾部。平均而言,第一个和最后一个元素比所有其他元素小 2 倍。问题是为什么会这样?
const numberArray = Array(500).fill(0)
for(let i=0;i<100000;i++){
const rndNumber = Math.round(Math.random()*499)
++numberArray[rndNumber]
}
console.log(numberArray[0], '- count first element')
console.log(numberArray[499], '- count last element')
console.log(numberArray[250], '- count 249')
console.log(numberArray[29], '- count 28')
console.log(numberArray[473], '- count 472')
如果您想象四舍五入为整数的(小数)值范围,这很容易理解。对于第一个和最后一个数字,这些间隔比所有其他数字短两倍。
仔细看这张照片,想想为什么。