(数据类型-Number的浮点型)JavaScript权威指南笔记4.1
2016-06-23 19:19
423 查看
数字(number)的描述
javascript不区别整型数值和浮点型数值。javascript采用IEEE 754标准定义的64位浮点格式表示数字。
数字表示最大值是:2^1024约等于1.7976931348623157*10^308
最小值是:2^(-52)*2^(-1022)约等于5*10^(-324)。
本节给的最大值和最小值是一个大约值。
这个范围是怎么得来的呢?以下做个简单说明。
IEEE 754标准定义的64位浮点存储格式
目的了解浮点数存储结构和浮点数的表示范围是为了避免编写代码时,计算结果溢出造成内存泄漏。
计算机中:
(+0)=0.000…
(- 0)=1.000…
s:占1位,浮点数的符号位。
E:占11位,浮点数的指数或称为价码。
h:不占位,隐藏位。值是1或0。
f :占52位,小数位。
s(1)+E(11)+h(0)+f(52)=64位
下图为ieee754文档内容,其中53表示有1位s和52位f
64位浮点数二进制公式
V=(-1)^s*M*R^e=(-1)^s*1.f*R^eR为基数,这里的表达式是二进制,值为2。
M=h+0.f,即 M=1+0.f 或 M=0.0+0.f。M为1时称为规范化格式,M值为0时称为非规范化格式。
V结果可表示:无穷大,无穷小,NaN,sNaN,0.f*2^emin,1.f*2^e,0。
ieee754文档的截图:
另一个文档描述的图比较直观,见下图(出处点击这里):
当emin < e < emax时,V的值为1.f*2^e,为浮点型规范化表示,隐藏位h的值为1。
当e=emin-1和f为非0值时,为浮点型非规范化表示,隐藏位的值为0。
NaN表示不是一个数。
关于E值的说明
E值用移码来存储,所以真值e需要加一个修正值才等于E值,64位浮点数的修正值是1023,即E=e+1023。计算机中用补码来将负数和值一起编码,所以11位的1023是[-1023]补=111 1111 1111=100 0000 0001。E占用11位,为无符号值,所以E值表示的范围是0到2^11-1,即0到2047。真值e最大值=E最大值-1023=1024。真值e的最小值=E最小值-1023=-1023。真值e的表示范围是 -1023到1024。
E值为全1和全0时有特殊用途。用来结合f值表示浮点数结果的其他情况(见前面的表格图:TABLE D-2 IEEE 754 Special Values)。
E值最大值,即为全1时,E值=2047,真值e=1024。
e=E-1023=2047-1023=111 1111 1111[移] + 100 0000 0001[补] =1100 0000 0000,进位1超过11位,丢弃,11位的值为“100 0000 0000”。“100 0000 0000”表示的正数时真值为1024,表示负数时为-2048。因为E-1023>0,结果为正数,所以e值为1024而不是-2048。
E值最小值,即为全0时,E值=0,真值e=-1023。
e=E-1023=0-1023=000 0000 0000 + 100 0000 0001 = 100 0000 0001,11位的值为“100 0000 0000”。“100 0000 0001”表示的正数时真值为1025,表示负数时为-1023。因为E-1023<0,结果为负数,所以e值为-1023,而不是1025。
真值e的表示范围是emin到emax(注意emin和emax是真值),见下图:
e最小值=-1023=emin-1=-1022-1,即emin=-1022。
e最大值=1024=emax+1=1023+1,即emax=1023。
浮点数规范化格式真值e的范围是:-1022 < e < 1023。
浮点数非规范化格式需要算上f能表示的范围,即2^(-52)。
浮点数非规范化格式真值e最小值是:2^(-52)*2^(-1022)
约等于5*10^(-324)。
浮点数非规范化格式真值e最大值是:2^1024,
约等于1.7976931348623157*10^308 。
ieee754文档64位表示范围截图如下:
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- 关于PHP浮点数你应该知道的(All 'bogus' about the float in PHP)
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解