首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Math.random() === Math.random()有可能吗

Math.random() === Math.random()有可能吗
EN

Stack Overflow用户
提问于 2015-07-06 23:02:06
回答 3查看 2.6K关注 0票数 4

在JavaScript中,这个表达式会在任何浏览器中计算为真吗?为什么或者为什么不?

代码语言:javascript
复制
  Math.random() === Math.random()

注意:请把上面的代码按字面意思记为。我并不是问Math.random是否会产生重复的值。

Note2:不给猴子打补丁

这个问题是关于Math.random()的内部实现,而不是关于随机数的性质。

EN

回答 3

Stack Overflow用户

发布于 2015-08-13 03:04:02

是。只要对数值精度有限制,随机数算法总是有可能发生碰撞(产生两个相同的值)。

JavaScript的Math.random()函数返回一个等于0 <= N < 1的随机数。在现实世界中,N理论上是无限的。在计算中,任何random()函数结果的有限精度都会导致有限的结果集。

JavaScript使用带符号的64位双倍,但random()函数不返回负值.因此,唯一返回值的最大范围相当于32位无符号整数.

因此,Math.random() === Math.random()评估为真的概率约为1/ 4294967296^2,或1/ 1.8e19,或1/ 18 /五分之一。

要想在实践中实现这一点,需要一个循环中运行的函数,并在大约500年内每秒执行10亿次(1 GHz )。或者你第一次尝试就走运了。;-)

票数 3
EN

Stack Overflow用户

发布于 2015-07-06 23:10:15

当然可以,假设这样的事情是预先运行的:

代码语言:javascript
复制
Math.random = function () {return 4;}

否则,除了浏览器实现中的一个bug,理论上是可能的,但我仍然会说,“这将评估为真”的答案是“否”。这是一个太小的概率,不可能现实地发生。

票数 0
EN

Stack Overflow用户

发布于 2021-03-31 08:11:18

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31257147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档