math.random()和其他RNG函数的工作频率如何?

时间:2015-11-09 08:37:52

标签: javascript

所以我刚刚开始编码,我对RNG函数有疑问,比如Math.random()。他们经常去哪儿?每当需要一个值时,它会产生另一个数字。例如,在

var num1; 
num1 = Math.random();
alert(num1)
num1 = Math.random();
alert(num1);

这两个JS警报会有不同的数字吗?使用

之类的东西也一样
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

而不是在上面的程序中使用Math.random()。

2 个答案:

答案 0 :(得分:1)

Math.random的规范说明了这一点:

  

使用依赖于实现的算法或策略,返回具有正号,大于或等于0但小于1的Number值,随机或伪随机选择,在该范围内具有近似均匀的分布。这个函数不带参数。

所以它没有明确地解决这个问题 - 但这本身就是一个答案。这是一个函数,当你调用它时会返回一个随机数。唯一有意义的是对多个连续呼叫安全。事实上,

Math.random() == Math.random()

将(几乎)总是按预期返回false。实现可能会给出不同的结果,是的 - 但是你很难找到一个伪随机生成器,当从同一个线程一遍又一遍地调用时,它不会返回不同的值。

“近似均匀分布”基本上意味着return 0.3不是一致的实现,无论掷骰子导致该常数有多公平。这也意味着两个连续调用完全可以返回相同的号码 - 它不太可能:)

答案 1 :(得分:1)

Math.Random只是一个给出随机数的函数。它没有内存来保存已经生成的数字,因此无法保证不会生成重复的数字,尽管可能性非常低。

在你的第二个例子中,将在最小值到最大值之间生成一个随机数,包括最小值和最大值。