我们可以使用下面列出的函数轻松获得所需范围内的随机浮点数 [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()
(或等价物)“滚动”一个 IEE-754 浮点双精度 的位来“增加”我们的值,将最大可能值准确地放在 1.0,但这看起来像很难做到正确,尤其是在不适合位操作的语言中。有没有更简单的方法?
(顺便说一句,为什么随机数生成器在 [0,1)
而不是 [0,1]
中生成数字?)
[编辑] 请注意,我 不需要 这个,我完全知道这种区别是迂腐的。只是好奇并希望得到一些有趣的答案。如果这个问题不合适,请随意投票关闭。
原文由 maerics 发布,翻译遵循 CC BY-SA 4.0 许可协议
我相信有更好的决定,但这个应该有效 :)