JavaScript Math.Random()连续两次创建相同数字的几率是多少?

T.T*_*.T. 7 javascript random math

它是否正确?使用 - http://en.wikipedia.org/wiki/Binomial_probability

看起来值从.0000000000000000到.9999999999999999

发生两次的概率= p ^ 2 =(1/9999999999999999)^ 2 = 1.0 e-32

我想我在这里错过了一些东西?

另外,伪随机数发生器如何改变这种计算?

谢谢.

Tik*_*vis 5

我认为连续获得两个数字的概率是1除以生成器的范围,假设它具有良好的分布.

这样做的原因是第一个数字可以是任何数字,第二个数字需要再次成为该数字,这意味着我们根本不关心第一个数字.连续两次获得相同数字的概率与获得任何特定数字一次的概率相同.

连续两次获得某个特定数字,例如连续两次0.5,将是p ^ 2; 但是,如果你只是连续两次关心任何数字,那只是p.

  • 我想是的,是的.假设你有一个从1到6的骰子.滚动两个六的机会是1 /(6*6); 但是,滚动两个相同数字的概率是滚动两个,两个两个等的概率的总和.这是6*(1 /(6*6))或仅1 // 6. (2认同)

oll*_*iej 5

在理想世界中,Math.random()绝对是随机的,其中一个输出完全独立于另一个输出,(假设p =产生任何给定数字的概率)导致重复的任何值可能为p ^ 2紧接着(正如其他人已经说过的那样).

在实践中,人们希望Math.random快速,这意味着引擎使用伪随机数生成器.有许多不同类型的PRNG,但最基本的是线性同余发生器,它基本上是一个功能:

s(n + 1) = some_prime * s(n) + some_value mod some_other_prime
Run Code Online (Sandbox Code Playgroud)

如果使用这样的发生器,那么在您调用random() some_other_prime时间之前,您将看不到重复的值.你得到了保证.

然而,相对最近,显而易见的是,这种行为(加上PRNG与当前时间一起播种)可用于某些形式的跟踪导致浏览器做了很多事情,这意味着你不能假设后续random()调用.

  • 当然你也假设没有其他人正在调用random() - 如果你在一个计时器上调用random()(比如说)那么另一个页面可能会在你之前运行,并调用random()本身,这可能会改变一些东西. (2认同)