IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> javascript浮点数介绍 -> 正文阅读

[JavaScript知识库]javascript浮点数介绍

介绍

单精度浮点数32位,双精度浮点数64位。其中单精度由1位符号位,8位指数位,23位尾数位组成。双精度由1位符号位,11位指数位,52位尾数位组成。

图示

以64位浮点数为例,sign表示符号位用S表示,exponent表示指数位用E表示,mantissa表示尾数用M表示。

浮点数

浮点数形式

规格化:当指数位E不全为0也不全为1时就是规格化形式浮点数

非规格化:当指数位E全为0时就是非规格化形式浮点数

特殊数值:当指数位E全是1时就是特殊数值,当尾数M全是0时表示无穷大,当符号位S等于1时就是负无穷大。若尾数M不全是0,那么这个数不是一个合法的实数,也就是NaN

尾数之前其实还有一个隐藏位。尾数部分其实是小数部分,.xxxxx是52位二进制小数,如果浮点数形式是规格化隐藏位就是1,非规格化就是0。

用s、e、m分别代表符号位、指数位、尾数位的实际值,n代表浮点数,公式为:
n = ( ? 1 ) s × m × 2 e (1) n = (-1)^s \times m \times 2^e \tag{1} n=(?1)s×m×2e(1)

特殊数值

特殊数值可以表示正负无穷大以及NaN

符号位S(1)指数位E(11)尾数位M(52)结果
0全是1全是0Infinity
1全是1全是0-Infinity
0或1全是1不全是0NaN

规格化

规格化形式的尾数的实际值是1.M。指数E不全为0并且不全为1。

当尾数M全为0时最小,当尾数全为1时最大。所以
1.0 ≤ ( m = 1. M ) ≤ 2 ? 2 ? 52 (2) 1.0 \leq (m = 1.M) \leq 2 - 2^{-52} \tag{2} 1.0(m=1.M)2?2?52(2)

提示:当尾数52位全为1时,再加上2^(-52)就等于2。

1.M是一个二进制小数,假设将小数点后移52位,那1.M就是一个二进制整数。所以最大安全整数就是(2 - 2^(-52)) * 2^52,改个符号位就是最小安全整数。

如果超出尾数M的精度范围就不能连续表示了,比如:

let a = 9007199254740991;  // 最大安全整数
a + 1 == a + 2;  // true

因为指数E不全为0也不全为1,所以
1 ≤ E ≤ 2 11 ? 2 (3) 1 \leq E \leq 2^{11} - 2 \tag{3} 1E211?2(3)
指数的实际值 e 被解释为偏置形式的数,偏移量用bias表示
{ b i a s = 2 E 的 宽 度 ? 1 ? 1 e = E ? b i a s (4) \lbrace^{e = E - bias}_{bias = 2^{E的宽度-1} - 1} \tag{4} {bias=2E?1?1e=E?bias?(4)
所以偏移量bias = 2^(11 - 1) - 1 = 1023,所以 e = E - 1023
n = ( ? 1 ) S × 1. M × 2 E ? 1023 (5) n = (-1)^S \times 1.M \times 2^{E - 1023} \tag{5} n=(?1)S×1.M×2E?1023(5)
不算符号位,n的最大值是 (2 - 2^(-52)) * 2^1023 也就是最大浮点数

最小值是1.0 * 2^(-1022)

非规格化

非规格化的尾数是0.M。指数E全为0。

当尾数M全为0时最小,当尾数全为1时最大。所以
0 ≤ ( m = 0. M ) ≤ 1 ? 2 ? 52 (6) 0 \leq (m = 0.M) \leq 1 - 2^{-52} \tag{6} 0(m=0.M)1?2?52(6)
指数E全是0,e的偏置形式为
e = 1 ? b i a s = ? 1022 (7) e = 1 - bias = -1022 \tag{7} e=1?bias=?1022(7)

n = ( ? 1 ) S × 0. M × 2 ? 1022 (8) n = (-1)^S \times 0.M \times 2^{-1022} \tag{8} n=(?1)S×0.M×2?1022(8)

当M全是0时,n等于0

当M不全是0时,不算符号位,n的最小值是 2^(-52) * 2^(-1022) 也就是最小浮点数。最大值是 (1 - 2^(-52)) * 2^(-1022)

总结

浮点数形式指数E(11)尾数M(52)浮点数值范围(不考虑符号位)
非规格化全是0全是000
非规格化全是0不全为0公式(8)2(-52)*2(-1022) ~ (1 - 2^(-52)) * 2^(-1022)
规格化不全为0也不全为1任意值公式(5)2^(-1022) ~ (2 - 2^(-52)) * 2^1023
特殊数值全是1全是0无穷大无穷大
特殊数值全是1不全为0NaNNaN
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 01:52:39  更:2022-01-14 01:55:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:38:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码