javascript - JavaScript Math.Random() 连续两次创建相同数字的可能性有多大?

标签 javascript math random

这是正确的吗?使用 - 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/

相关文章:

c++ - 如何解决这个逻辑运算符问题?

random - 现实世界中的随机数服从均匀分布吗

Java,计算随机数并保存的程序

javascript - JS增加尺寸的最佳方法

javascript - Highcharts 复制图例标签

math - Baking-Pi 挑战 - 理解和改进

javascript - 如何用 javascript 计算 ARM 上的年利率

java - While 语句的循环解决方案?

javascript - 如何使用 Javascript 移动对象?

javascript - 无法使用 Javascript 通过标记访问 html 元素