【问题标题】:Can Math.random() exactly equal .5Math.random() 可以完全等于 0.5
【发布时间】:2018-08-28 01:49:22
【问题描述】:

这不是第一次询问“Math.random() 是否相等”。

Will JavaScript random function ever return a 0 or 1?

Is it possible for Math.random() === Math.random()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random - 更高层次的解释

https://hackernoon.com/how-does-javascripts-math-random-generate-random-numbers-ef0de6a20131 - 底层解释

所以;我的问题: JavaScript 的 Math.random() 可以完全等于 .5 吗?

它符合>= 0 && < 1 的定义。但在实践中,我尝试了几种不同的方法,最后一种是:

while (Math.random() != .5)

它们要么超时,要么永远不完全等于 .5

数十亿次尝试/多个浏览器 (firefox 60+ X64) 稍后崩溃。是否可以?它依赖于浏览器/系统吗?是我对统计概率缺乏理解吗?

【问题讨论】:

标签: javascript


【解决方案1】:

好问题!我不是统计学家,所以有更多经验的人可以随时加入并纠正我。

话虽如此,据我所知,你的问题的答案:

所以;我的问题JavaScript 的 Math.random() 能否完全等于 .5

!这个答案让我有些惊讶,因为它有点违反直觉;但我觉得this website 提供了一个很好的解释。答案是否定的原因是因为您被限制在 (0,1) 范围内(不包括在内)。这是一个连续分布。所以你的问题本质上是在问:

从连续分布中选择特定值的概率是多少?

答案是 0。从连续分布中采样(根据定义)有无数种可能性。因此,获得指定值的概率为:1/无穷大,渐近接近于零。

【讨论】:

  • 范围是[0, 1),有有限个IEEE-754双精度数(这是JS使用的)。此外,在连续范围内,概率 0 并不意味着不可能,因此“否”的答案肯定是错误的。
  • 感谢您的休息。不确定否决票,这个问题是公开讨论。但由于芝诺悖论,我不同意你的看法。无限不是一个数字,而是一个概念。因此 1/infinity 也只是一个概念。并且不适用于现实世界的数学。
  • @Xufox 不错。我在这两个方面都错了。 OP 确实指定了一种编程语言,答案应该是肯定的。这是可能的,但极不可能。您正在查看有符号浮点 64 位 IEEE 754 的概率为 1/(2^{1023}),而不会损失精度(我相信)。
  • @PoorlyWrittenCode OP 确实指定了一种编程语言。我是从数学的角度而不是从 CS 的角度来看的。在 IEEE 754 中,唯一编号的数量是有限的。这完全改变了答案。我不确定我们可以说无穷大不适用于真正的数学,因为它在计算可行性领域的重要性(see cantor's diagonalisation argument)
  • 我认为无穷大对计算机理论也有重要意义。另请注意,有整个数学子集表示区分无穷大类型(see Aleph number)
猜你喜欢
  • 2018-07-10
  • 2018-08-22
  • 2013-07-15
  • 2013-08-26
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2017-05-21
相关资源
最近更新 更多