Math.random()从0(包含)返回到1(独占)有什么意义?

Math.random()从0(包含)返回到1(独占)有什么意义?,random,Random,Math.random()在我的控制台中返回一个在二进制点后有17位的数字,因此它正好为0的概率非常低。从技术上讲,它可以是0,但永远不可能是1,而实际上它永远不会返回这两个数字中的任何一个,这到底有什么意义?是什么导致了这一切?有人能给我举一些例子说明Math.random()的这个属性与之相关吗?通常要生成随机浮点值,首先生成一个随机整数,然后将其缩放到浮点范围。由于浮点值的二进制表示,因此在0和1之间存在两个均匀分布值的幂,不包括1.0。如果包含1.0,则范围为二加一的幂;在这样的范围内生

Math.random()
在我的控制台中返回一个在二进制点后有17位的数字,因此它正好为0的概率非常低。从技术上讲,它可以是0,但永远不可能是1,而实际上它永远不会返回这两个数字中的任何一个,这到底有什么意义?是什么导致了这一切?有人能给我举一些例子说明
Math.random()
的这个属性与之相关吗?

通常要生成随机浮点值,首先生成一个随机整数,然后将其缩放到浮点范围。由于浮点值的二进制表示,因此在0和1之间存在两个均匀分布值的幂,不包括1.0。如果包含1.0,则范围为二加一的幂;在这样的范围内生成一个统一的随机整数要困难得多

此外,返回1.0只会导致问题。当你把它乘以一个常数后,你最终得到这个常数的机会非常小,但仍然是一个机会。即使在使用“舍入到最近值”进行量化后,与任何其他值相比,发生的几率仍然只有一半(零除外,零也会受到相同的惩罚)

这样做既容易,又更有用


也就是说,这不是一个对完全均匀分布大惊小怪的地方。只需将一个浮点值乘以一个常数(该值本质上受限于某个有限的值集)并对结果进行量化,就可以得到比其他结果稍高(无法测量)的结果。

是否见过
Math.floor(Math.random()*N)
?我们绝对不想回到那里。
它精确为0的概率非常低
随机性的点是不可预测的。“它精确为0的概率非常低”-任何其他值的概率也是如此[0,1)@BoltKey:当然它会改变一些东西-得到
0
的概率会更小,并且小于得到数字1…N-1的概率。我承认这不算多,但考虑到JavaScript数字的数量有限,这仍然是一个区别。@BoltKey:这使得它不再被正确分配-包括
0
可以解决这个问题,这就是为什么要这么做。