使用epsilon进行JavaScript相等

时间:2019-02-18 16:24:24

标签: javascript floating-point

假设我的总和如下,其中n是任何正整数。

let sum = 0;
for (let i = 0; i < n; ++i) {
  sum += (1/n);
}

此总和应始终等于1,但对于JS浮点怪异度,有时则不然。因此,在将Number.EPSILON与1进行比较时,我一直在使用sum,如下所示:

function sumIsEqualToOne(sum) {
  return Math.abs(1 - sum) < Number.EPSILON;
}

根据MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON)上的示例。

对于n = 71 - sum === Number.EPSILON而言,这并不总是有效,因此sumIsEqualToOne返回false

我最初的假设是否正确,并且sum实际上并不总是等于1? (1/7)+(1/7)+(1/7)+(1/7)+(1/7)+(1/7)+(1/7) !== 1吗?

0 个答案:

没有答案