美文网首页
2020-10-26随笔 ES6Number.EPSILON

2020-10-26随笔 ES6Number.EPSILON

作者: JLong | 来源:发表于2020-10-26 20:02 被阅读0次

Number.EPSILONES6 在Number对象上面,新增一个极小的常量Number.EPSILON。根据规格,它表示 1 与大于 1 的最小浮点数之间的差。

对于 64 位浮点数来说,大于 1 的最小浮点数相当于二进制的1.00..001,小数点后面有连续 51 个零。这个值减去 1 之后,就等于 2 的 -52 次方。

Number.EPSILON === Math.pow(2,-52) //true

Number.EPSILON // 2.220446049250313e-16

Number.EPSILON.toFixed(20)// "0.00000000000000022204"

toFixed()   //四舍五入

Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。

引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。我们知道浮点数计算是不精确的。

0.1+0.2// 0.300000000000000040

.1+0.2-0.3// 5.551115123125783e-17

5.551115123125783e-17.toFixed(20)// '0.00000000000000005551'

所以可以利用Number.EPSILON部署一个误差检查函数

function withinErrorMargin (left,right){

    return Math.abs(left-right) < Number.EPSILON*Math.pow(2,2)

}

0.1+0.2===0.3 // false

withinErrorMargin(0.1+0.2,0.3) // true

1.1+1.3===2.4 // false

withinErrorMargin(1.1+1.3,2.4) // true

相关文章

网友评论

      本文标题:2020-10-26随笔 ES6Number.EPSILON

      本文链接:https://www.haomeiwen.com/subject/jmdzmktx.html