今天,有人给我发电子邮件告诉我它可能不像我想象的那样随机。她试图生成非常大的随机数(例如,在1和10000000000000000000之间),并发现它们几乎总是相同的数字位数。事实上,我将函数包装在一个循环中,以便可以生成数千个数字,而对于非常大的数字,变化仅约为2个数量级。 为什么?
这是循环版本,所以您可以自己尝试:
http://andrew.hedges.name/experiments/random/randomness.html
这包括了一个简单的实现,取自Mozilla开发者网络,以及一些来自1997年的代码,我从一个不再存在的网页上偷走了它(Paul Houle的“中央随机器1.3”)。查看源代码以了解每种方法的工作方式。
我在这里和其他地方读到了有关Mersenne Twister的信息。我感兴趣的是,为什么JavaScript内置的Math.random函数的结果变化不会更大。谢谢!
Math.random()
方法的分布均匀性。但是...以某种方式来说,这是出乎意料的。坦白地说,我无法相信有一百多个人不知道这个问题的原因。 - Константин Ван