我们可以很容易地得到所需范围内的随机浮点数[X,Y)
(请注意,X 是包含在内的,Y 是不包含的),具有下面列出的函数,因为Math.random()
(和大多数伪随机数生成器,AFAIK)产生数字[0,1)
:
function randomInRange(min, max) {
return Math.random() * (max-min) + min;
}
// Notice that we can get "min" exactly but never "max".
我们怎样才能得到一个想要的范围内的随机数包括的到两个边界,即[X,Y]
?
我想我们可以“增加”我们的价值Math.random()
(或等效)通过“滚动”的位IEEE-754 浮点双精度 http://en.wikipedia.org/wiki/IEEE_754-2008将最大可能值精确地设置为 1.0,但这似乎很难做到正确,尤其是在不太适合位操作的语言中。有更容易的方法吗?
(顺便说一句,为什么随机数生成器产生的数字是[0,1)
代替[0,1]
?)
[Edit]请注意,我没有need为此,我充分意识到这种区别是迂腐的。只是好奇并希望得到一些有趣的答案。如果这个问题不合适,请随意投票结束。
我相信有更好的决定,但这个应该可行:)
function randomInRange(min, max) {
return Math.random() < 0.5 ? ((1-Math.random()) * (max-min) + min) : (Math.random() * (max-min) + min);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)