为什么如果我使用随机数生成器和范围 0 - 9,我不会得到与下限函数组合相同的均匀分布?
Math.floor(Math.random() * 10)
给出相当均匀的分布,同时Math.round(Math.random() * 10)
没有。
Math.floor() 对于 [0, 1) 范围内的任何值(不包括 1)返回 0,对于 [1, 2) 范围内的任何值返回 1,等等。
因此,如果我们有相同的机会获得这些范围之一中的数字,我们将获得 0 和 1 的均匀分布。
然而,Math.round() 对于小于 0.5 的值返回 0,对于小于 1.5 的值返回 1,等等。
因此,我们实际上有一半的机会得到 0,因为只有 0 到 0.5 之间的值才会四舍五入为 0。
╔═════════╦═════════╦═════════╗
║ Range ║ floor() ║ round() ║
╠═════════╬═════════╬═════════╣
║ [0, 1) ║ 0 ║ 0 or 1 ║
║ [1, 2) ║ 1 ║ 1 or 2 ║
║ [2, 3) ║ 2 ║ 2 or 3 ║
║ ... ║ ... ║ ... ║
║ [9, 10) ║ 9 ║ 9 or 10 ║
╚═════════╩═════════╩═════════╝
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)