所以我刚刚开始编码,我对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()。
答案 0 :(得分:1)
Math.random
的规范说明了这一点:
使用依赖于实现的算法或策略,返回具有正号,大于或等于0但小于1的Number值,随机或伪随机选择,在该范围内具有近似均匀的分布。这个函数不带参数。
所以它没有明确地解决这个问题 - 但这本身就是一个答案。这是一个函数,当你调用它时会返回一个随机数。唯一有意义的是对多个连续呼叫安全。事实上,
Math.random() == Math.random()
将(几乎)总是按预期返回false。实现可能会给出不同的结果,是的 - 但是你很难找到一个伪随机生成器,当从同一个线程一遍又一遍地调用时,它不会返回不同的值。
“近似均匀分布”基本上意味着return 0.3
不是一致的实现,无论掷骰子导致该常数有多公平。这也意味着两个连续调用完全可以返回相同的号码 - 它不太可能:)
答案 1 :(得分:1)
Math.Random只是一个给出随机数的函数。它没有内存来保存已经生成的数字,因此无法保证不会生成重复的数字,尽管可能性非常低。
在你的第二个例子中,将在最小值到最大值之间生成一个随机数,包括最小值和最大值。