mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-25 03:02:21 +00:00
docs(number): edit Number.EPSILON #508
This commit is contained in:
parent
2585e72712
commit
673440939e
@ -164,15 +164,21 @@ ES5 可以通过下面的代码,部署`Number.isInteger()`。
|
||||
|
||||
## Number.EPSILON
|
||||
|
||||
ES6在Number对象上面,新增一个极小的常量`Number.EPSILON`。
|
||||
ES6 在`Number`对象上面,新增一个极小的常量`Number.EPSILON`。根据规格,它表示1与大于1的最小浮点数之间的差。
|
||||
|
||||
对于64位浮点数来说,大于1的最小浮点数相当于二进制的`1.00..001`,小数点后面有连续51个零。这个值减去1之后,就等于2的-52次方。
|
||||
|
||||
```javascript
|
||||
Number.EPSILON === Math.pow(2, -52)
|
||||
// true
|
||||
Number.EPSILON
|
||||
// 2.220446049250313e-16
|
||||
Number.EPSILON.toFixed(20)
|
||||
// '0.00000000000000022204'
|
||||
// "0.00000000000000022204"
|
||||
```
|
||||
|
||||
`Number.EPSILON`实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
|
||||
|
||||
引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。我们知道浮点数计算是不精确的。
|
||||
|
||||
```javascript
|
||||
@ -186,28 +192,36 @@ Number.EPSILON.toFixed(20)
|
||||
// '0.00000000000000005551'
|
||||
```
|
||||
|
||||
但是如果这个误差能够小于`Number.EPSILON`,我们就可以认为得到了正确结果。
|
||||
上面代码解释了,为什么比较`0.1 + 0.2`与`0.3`得到的结果是`false`。
|
||||
|
||||
```javascript
|
||||
5.551115123125783e-17 < Number.EPSILON
|
||||
0.1 + 0.2 === 0.3 // false
|
||||
```
|
||||
|
||||
`Number.EPSILON`可以用来设置“能够接受的误差范围”。比如,如果两个浮点数的差小于2的-50次方(即`Number.EPSILON * Math.pow(2, 2)`,我们就可以认为这两个浮点数是相等的。
|
||||
|
||||
```javascript
|
||||
5.551115123125783e-17 < Number.EPSILON * Math.pow(2, 2)
|
||||
// true
|
||||
```
|
||||
|
||||
因此,`Number.EPSILON`的实质是一个可以接受的误差范围。
|
||||
因此,`Number.EPSILON`的实质是一个可以接受的最小误差范围。
|
||||
|
||||
```javascript
|
||||
function withinErrorMargin (left, right) {
|
||||
return Math.abs(left - right) < Number.EPSILON;
|
||||
return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
|
||||
}
|
||||
withinErrorMargin(0.1 + 0.2, 0.3)
|
||||
// true
|
||||
withinErrorMargin(0.2 + 0.2, 0.3)
|
||||
// false
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
上面的代码为浮点数运算,部署了一个误差检查函数。
|
||||
|
||||
## 安全整数和Number.isSafeInteger()
|
||||
## 安全整数和 Number.isSafeInteger()
|
||||
|
||||
JavaScript能够准确表示的整数范围在`-2^53`到`2^53`之间(不含两个端点),超过这个范围,无法精确表示这个值。
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user