本文主要是意识流写法,想到哪写到哪, 估计有些废话, 自行过滤(逃...)。 前端开发应该都知道这是浮点数运算一个经典的问题了,网上关于这个问题的文章也一抓一大把,以前对这个问题也只是非常粗浅的知道这是浮点数的精度问题,具体原因并没有深究过,偶然又碰到一个与这个问题相关的问题,就再捋一下,深层次理解下。
以上几个问题其实是JS采用的是IEEE754浮点数标准存储, 其他用这种标准的语言都是会有这样的问题的,因此理解这个标准,上面的就都能深层次的理解了。
Js中number类型的数字都是采用64位的双精度浮点数进行存储的,其中1个符号位(0正1负),11个指数位,52个尾数位。
每一个数字转换成二进制的科学计数法,然后得到符号位、指数位和尾数进行存储。与十进制的科学计数法类似,比如10进制中12345678=1.2345678*10^7 ,符号位(对应二进制中的符号位)是正, 小数2345678(对应二进制中的尾数),指数7(对应二进制中的指数)。值得注意的是二进制科学计数法表示中的指数位11位能取到的值是0~2047,我们知道十进制中可以有负数表示小数,同样二进制中也应该有负数, 采取的方法就是取2013的偏移值,真正的指数表示范围就是-2013~2014。算数表示如下:
sign是符号位, e是11位指数位的值, b0~b51是52位二进制尾数。举几个简单例子:
0 01111111111 0000000000000000000000000000000000000000000000000000 ≙ +1.0*2^0 = 1
0 10000000000 1000000000000000000000000000000000000000000000000000 ≙ +1.1*2^1 = 3
复制代码
注意点:
指数部分1~2016会被表示为正常的数字
指数部分为0且尾数部分不为0用来表示非正常的数字,计算时不会有前导1, 即计算公式为:
3.指数部分为0, 尾数部分为0, 根据不同符号位值表示+0和-0
4.指数部分为2047,尾数部分为0, 根据不同符号位值表示负无穷(Number.NEGATIVE_INFINITY)、正无穷(Number.POSITIVE_INFINITY )
5.指数部分为2047, 尾数部分不为0,值会解析为NAN
这个问题就是浮点数存储的精度问题,我们知道尾数位只有52位,0.1用二进制表示如下:
0.000110011001100110011001100110011001100110011001100110011...
复制代码
如上可以看出0.1二进制表示时尾数是超过52位的, 所以52位之后的会被舍去,这就有了浮点数存储的精度丢失问题。
* 安全整数范围MDN上是(-(2^53 - 1) ~ (2^53 - 1)),犀牛书上是 ( -2^53 ~ 2^53 )1个符号位,11位指数位, 52位尾数位。按照分析,不考虑符号位,尾数位取值52个1就是表示的最大值了,不会有精度损失,此时指数位代表数值是52+1023=1075,此时即为(-(2^53 -1)~(2^53 -1) ) 这就是MDN上描述的,这个范围内的值都是没有精度问题的。但是2^53这个值,存储的时候尾数是52个0, 指数位为53+1023=1076,这个值也是刚好没有精度损失的,此时即为(-2^53 ~2^53) ,这就是犀牛书上的描述了。值得注意的是用Math.isSafeInteger()判断安全数范围和MDN中描述一样。
* js中能表示的最大正数由IEEE754浮点数标准可知, 指数位取:2046, 尾数位取52位1就表示最大值1.7976931348623157*10^308
* js中能表示的最小正数由IEEE754浮点数标准可知, 指数位全为:0, 尾数位取51位0, 最后一位1就表示最小值 如下图所示,表示出了最大正数与最小正数的以及一些特殊值的64位二进制存储。 附一个一些特殊值的64位存储:wiki。
掌握IEEE754浮点数标准,就能够深层次的理解精度、最大值、最小值以及其他问题, 需要注意IEEE754浮点数标准中的一些特殊情况。
相关知识
js水仙花数原理
js学习总结
《异度之刃2》花JS、JK及JD三形态顶级配置推荐
html玫瑰花效果代码,html5渲染3D玫瑰花情人节礼物js特效代码
js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中
js html5渲染的3D玫瑰花(程序员的情人节礼物)
使用现有对象作为变异中的输入
花朵上的大青虫
JavaScript DOM编程艺术
有机农业中蚜虫的治理方法
网址: js中的0.1+0.2!==0.3 https://m.huajiangbk.com/newsview133220.html
上一篇: 创建虚拟环境并,创建pytorc |
下一篇: [题目]如图表示植物非绿色器官呼 |