这是正确的吗?使用 - http://en.wikipedia.org/wiki/Binomial_probability
看起来值是从 .0000000000000000 到 .9999999999999999
发生两次的概率 = p^2 = (1/9999999999999999)^2 = 1.0 e-32
我想我在这里遗漏了什么?
另外,作为一个伪随机数生成器如何改变这个计算?
谢谢。
最佳答案
在理想世界中,Math.random() 将是绝对随机的,一个输出完全独立于另一个输出,这(假设 p = 产生任何给定数字的概率)导致任何给定数字的概率为 p^2一个接一个地重复值(正如其他人已经说过的)。
在实践中,人们希望 Math.random 速度快,这意味着引擎使用伪随机数生成器。有许多不同类型的 PRNG,但最基本的是线性同余生成器,它基本上是一个类似以下函数的函数:
s(n + 1) = some_prime * s(n) + some_value mod some_other_prime
如果使用这样的生成器,那么在调用 random()
some_other_prime
次之前,您不会看到重复的值。你可以保证这一点。
然而,相对最近,这种行为(结合使用当前时间播种 PRNG)可用于某些表单跟踪变得明显,这导致浏览器执行许多操作,这意味着您不能假设任何关于随后的 random()
调用。
关于javascript - JavaScript Math.Random() 连续两次创建相同数字的可能性有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4456594/