n + Math.random()是否总是小于n + 1?

时间:2018-10-29 06:37:04

标签: javascript floating-point

我知道Math.random()小于1,但是问题是Math.random()生成浮点数,并且浮点加法可能会有舍入错误。

所以我的问题是,n + Math.random()

3 个答案:

答案 0 :(得分:3)

最大随机结果是严格小于1.0的最大double。将其加1可获得的实数结果恰好介于2.0与小于2.0的最大两倍之间。四舍五入到最接近会把它四舍五入到2.0,因为它是平局,而2.0是偶数。

由于四舍五入,您需要允许n + Math.random()

答案 1 :(得分:2)

是的,有几个-一旦数量的数量级足够高,解释器就不一定能够分辨出nn + 1之间的区别:

const verify = n => console.log(n + Math.random() < n + 1);
[
  Number.MAX_SAFE_INTEGER + 1,
  Infinity,
  -Infinity
].forEach(verify);

尽管如此,它并不是一个Math.random怪癖,而是一个JS数字精度怪癖。

答案 2 :(得分:-3)

如果Math.random()= 1 然后n + Math.random()= n + 1

Math.random()的范围是0–1(包括0,但不包括1)

因此n + Math.random()