在JavaScript中,这个表达式会在任何浏览器中计算为真吗?为什么或者为什么不?
Math.random() === Math.random()注意:请把上面的代码按字面意思记为。我并不是问Math.random是否会产生重复的值。
Note2:不给猴子打补丁
这个问题是关于Math.random()的内部实现,而不是关于随机数的性质。
发布于 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 )。或者你第一次尝试就走运了。;-)
发布于 2015-07-06 23:10:15
当然可以,假设这样的事情是预先运行的:
Math.random = function () {return 4;}否则,除了浏览器实现中的一个bug,理论上是可能的,但我仍然会说,“这将评估为真”的答案是“否”。这是一个太小的概率,不可能现实地发生。
发布于 2021-03-31 08:11:18
https://stackoverflow.com/questions/31257147
复制相似问题