Number.EPSILON
Number.EPSILON
ES6 在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"
Number.EPSILON
实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。我们知道浮点数计算是不精确的。
0.1 + 0.2
// 0.30000000000000004
0.1 + 0.2 - 0.3
// 5.551115123125783e-17
5.551115123125783e-17.toFixed(20)
// '0.00000000000000005551'
上面代码解释了,为什么比较0.1 + 0.2
与0.3
得到的结果是false
。
0.1 + 0.2 === 0.3 // false
Number.EPSILON
可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)
),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。
5.551115123125783e-17 < Number.EPSILON * Math.pow(2, 2)
// true
因此,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
上面的代码为浮点数运算,部署了一个误差检查函数。
Number.EPSILON相关推荐
- js 中的 number 为何很怪异
js 中的 number 为何很怪异 声明:需要读者对二进制有一定的了解 对于 JavaScript 开发者来说,或多或少都遇到过 js 在处理数字上的奇怪现象,比如: > 0.1 + 0.2 ...
- html number方法,JavaScript Number 对象
JavaScript Number 对象 JavaScript 只有一种数字类型. 可以使用也可以不使用小数点来书写数字. JavaScript 数字 JavaScript 数字可以使用也可以不使用小 ...
- Javascript 对象二(Number、String、Boolean、Array、Date、Math、RegExp)
Javascript 对象二(Number.String.Boolean.Array.Date.Math.RegExp) Number 数字 对象 String 字符串 对象 Boolean 布尔 对 ...
- JS Number对象常用函数(数字类型常用函数)
Number 属性 属性 描述 Number.MAX_VALUE 最大值 Number.MIN_VALUE 最小值 Number.NaN 非数字 Number.NEGATIVE_INFINITY 负无 ...
- Js中Number对象
Js中Number对象 JavaScript的Number对象是经过封装从而能够处理数字值的对象,Number对象由Number()构造器以及字面量声明的值在转化为包装对象时创建,JavaScript ...
- javascript Number object
属性 属性 描述 Number.MAX_VALUE The largest representable number (±1.7976931348623157e+308) Number.MIN_VAL ...
- js 中的 number 为何很怪异 1
js 中的 number 为何很怪异 声明:需要读者对二进制有一定的了解 对于 JavaScript 开发者来说,或多或少都遇到过 js 在处理数字上的奇怪现象,比如: > 0.1 + 0.2 ...
- ES6-11数值扩展:二进制和八进制、数值分隔符、Number.isFinite()、Number.isNaN()等
1. 二进制和八进制 用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503 // true 0o767 === 503 // true// 非严格模式 (function ...
- 《你不知道的JavaScript(中卷)》读后笔记 —— JavaScript中“Number”的冷门知识点
目录 1. Number.EPSILON 2. 整数的安全范围(Number.MAX_SAFE_INTEGER.Number.MIN_SAFE_INTEGER) 3. 整数检测(Number.isIn ...
- JavaScript中string与number
JavaScript中string与number string字符串 将一个值使用'单引号或者"双引号,引用起来就是字符串. ES6提供了反引号定义一个字符串,可以支持多行,还支持插值. l ...
最新文章
- json qbytearray 串 转_如何通过QByteArray在JSON中存储QPixmap?
- 南京秦淮灯会亮灯迎春 明城墙内外“飘”年味
- python sqlite3更新数据,python sqlite3-使用f字符串更新数据库函数
- tomcat启动startup.bat一闪而过 全面解决,大佬牛逼,转载
- 编译原理实验报告_任意给定一个正规式 r (包括连接、或、闭包运算),根据 Thompson算法设计一个程序,生成与该正规式等价的 NFA N 。
- Java IO: 序列化与ObjectInputStream、ObjectOutputStream
- python常用算法包_Python中常用的包--sklearn
- 【转】Java 项目UML反向工程转化工具
- python| map()函数应用详解
- Android 中关于Cursor类的介绍
- 【Python精彩案例】随拍文档转PDF扫描版
- 网络协议篇之CWMP协议(二)—— CWMP(TR-069)业务流程
- SGD,Momentum,优化算法原理及实现
- 在计算机领域黑箱,计算机模拟电学黑箱
- 点亮LED灯——arduino 学习第一天
- 内卷失败:敲了 10000 小时代码,我也没能成为一名高级程序员
- Q/W防洪跳转页面/微信小程序跳转到未备案域名
- 网络模型可视化工具-netron
- 致自己,时时需要修炼内功
- 一文读懂阿里云挑战 AWS 的底气 | 2018•大复盘
热门文章
- 电脑系统常用的10个快捷键,适合电脑新用户看看
- OLED显示模块驱动原理及应用
- html页面字体缩小模糊怎么解决,ps字体模糊怎么变清晰 设置一下字体大小,是否一样...
- 基于神经网络的车牌识别系统
- css3 箭头动态效果,CSS3制作上下跳动动画箭头效果
- css画横线箭头_如何用纯CSS实现的箭头的效果?
- 墨刀原型设计工具学习体会——临摹网易云音乐App
- 跟着团子学SAP PS:项目版本管理-项目模拟功能(CJV1/CJV2/CJV3/CJV4)
- 获取mac最高root权限登录系统
- sed替换字符串(变量)