包含范围内的随机浮点数加倍

新手上路,请多包涵

我们可以使用下面列出的函数轻松获得所需范围内的随机浮点数 [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 许可协议

阅读 161
1 个回答

我相信有更好的决定,但这个应该有效 :)

 function randomInRange(min, max) {
  return Math.random() < 0.5 ? ((1-Math.random()) * (max-min) + min) : (Math.random() * (max-min) + min);
}

原文由 Alex L 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题