我知道Math.random()小于1,但是问题是Math.random()生成浮点数,并且浮点加法可能会有舍入错误。
所以我的问题是,n + Math.random()
答案 0 :(得分:3)
最大随机结果是严格小于1.0的最大double。将其加1可获得的实数结果恰好介于2.0与小于2.0的最大两倍之间。四舍五入到最接近会把它四舍五入到2.0,因为它是平局,而2.0是偶数。
由于四舍五入,您需要允许n + Math.random()
答案 1 :(得分:2)
是的,有几个-一旦数量的数量级足够高,解释器就不一定能够分辨出n
和n + 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()