资讯专栏INFORMATION COLUMN

JS双精度64位 Number

awkj / 2528人阅读

摘要:类型两个字节为一个类型双精度位可以表示个数正无穷负无穷正数双精度位位符号位位指数位位小数位或正负无穷指数位全为位是指数位全为位不全为被位符号位位位控制,位不变,应该有种,但是不同的总共,指数位全为位全为指数位全为,不全为表示

typeof类型:

"undefined"
"object"
"number"
"string":utf-16两个字节为一个unite
"boolean"
"function"

number类型: 双精度64位
可以表示2^64-2^53+3个数

1)正无穷
   负无穷

2)0,-0

3)正数

4)NaN

双精度64位

    
    63 62…….52    51 20 ……0
    1  11111111   1111…1111
    1位符号位sign + 11位指数位e + 52位小数位f
    
    S*E*F
    S=(-1)^sign……(-1)^0或(-1)^1
    
    1)正负无穷:11指数位全为1,52位是0
    2)NaN:       11指数位全为1,52位不全为0
    
    1)+2)=3(被1位符号位 52位f位控制,E位不变,应该有2^53种,但是不同的nan)
       总共=2^64-2^53+3
    
      
    3)0,-0:     11指数位全为0,52位全为0
    
    4)11指数位全为0,f不全为0:denormal
        表示0~1之间的数,不包括1,不包括0
            E=2^(-1022);
            F=0.52位二进制
              =0+b(52-1)*2^(-1)+…b(0-52) *2^-52
              =0+1/2+1/4+1/8+…+1/2^52(f全为1的例子);
        0~1之间很小的间距,指数E与normal情况下最小E一致,2^(1-1023)=2^-1022
            每两个小数之间的差最小为=比如f位只有一个1与f位为0(非denormal值)的差
                                =1*2^-1022*(0+2^-52)   -   1*2^-1022 * (0+0)
                                =2^-1074
            denormal最小值=1*2^-1022*(0+2^-52)=2^-1074
    
    5)11指数位有0有1:normal
        表示>=1的数
            E=2^(e-1023);
            e=b(52+0) * 2^0+b(52+1) *2^1+…+b(52+7)*2^10
            
            F=1.52位二进制
              =1+b(52-1)*2^(-1)+…b(0-52) *2^-52
              =1+1/2+1/4+1/8+…+1/2^52(f全为1的例子);
            
            normal最小值=1*2^(1-1023)*(1+0)=2^-1022;

单精度32位(假如JS用单精度32位表示number,情况如下)

    31 30…….23    22 21 ……0
    1  11111111   1111…1111
    1位符号位sign+8位指数位e+23位小数位f
    
    S*E*F
    S=(-1)^sign……(-1)^0或(-1)^1
    
    1)正负无穷:8指数位全为1,23位是0
    2)NaN:         8指数位全为1,23位不全为0
    
        1)+2)=3(被1位符号位 23位f位控制,E位不变,应该有2^24种,但是不同的nan)
       总共=2^32-2^24+3
    
    3)0,-0:     8指数位全为0,23位全为0
    
    4)8指数位全为0,f不全为0:denormal
        表示0~1之间的数,不包括1,不包括0
            E=2^(-126);
            F=0.23位二进制
              =0+b(23-1)*2^(-1)+…b(0-23) *2^-23
              =0+1/2+1/4+1/8+…+1/2^23(f全为1的例子);
        0~1之间很小的间距,指数E与normal情况下最小E一致,2^(1-127)=2^-126
            每两个小数之间的差最小为=比如f位只有一个1与f位为0(非denormal值)的差
                                =1*2^-126*(0+2^-23)   -   1*2^-126 * (0+0)
                                =2^-149
            denormal最小值=1*2^-126*(0+2^-23)=2^-149
    
    5)8指数位有0有1:normal
        表示>=1的数
            E=2^(e-127);
            e=b(23+0) * 2^0+b(23+1) *2^1+…+b(23+7)*2^7
            
            F=1.23位二进制
              =1+b(23-1)*2^(-1)+…b(0-23) *2^-23
              =1+1/2+1/4+1/8+…+1/2^23(f全为1的例子);
            
            normal最小值=1*2^(1-127)*(1+0)=2^-126;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81258.html

相关文章

  • 由parseInt 引发的问题---想到浮点运算精度丢失---看透js number 的 encod

    摘要:如题先陈述下问题背景偶尔测测自己写的计算器,随便输入玩嘛,然后发生下面诡异的事情当我从一个输入到十个的时候,过程显示都是正确的,像这样继续输入一个的时候,然后就这个样子了什么原因呢看了下自己的代码,代码重要部分长这样的这里用了一下强制转化为 如题 先陈述下问题背景 偶尔测测自己写的计算器,随便输入玩嘛,然后发生下面诡异的事情:当我从一个 1 输入到十个 1 的时候,过程显示都是正确的...

    hightopo 评论0 收藏0
  • 该死的IEEE-754浮点数,说「约」就「约」,你的底线呢?以JS的名义来好好查查你

    摘要:而的浮点数设置的偏移值是,因为指数域表现为一个非负数,位,所以,实际的,所以。这是因为它们在转为二进制时要舍入部分的不同可能造成的不同舍 IEEE 754 表示:你尽管抓狂、骂娘,但你能完全避开我,算我输。 一、IEEE-754浮点数捅出的那些娄子 首先我们还是来看几个简单的问题,能说出每一个问题的细节的话就可以跳过了,而如果只能泛泛说一句因为IEEE754浮点数精度问题,那么下文还是...

    gaosboy 评论0 收藏0
  • 数据精度问题自查手册

    摘要:前言在数据敏感的业务场景中,常常会碰到数据精度问题,尤其在金额显示占比统计等地方,该问题尤为显著。计算机原理真香数值的精度问题,其实是非常基础的计算机原理知识。前言 在数据敏感的业务场景中,常常会碰到数据精度问题,尤其在金额显示、占比统计等地方,该问题尤为显著。由于数据的每一位有效数字都包含真实的业务语义,一点点偏差甚至可能影响业务决策,这让问题的严重性上升了几个阶梯。 那,什么是精度丢失...

    liangzai_cool 评论0 收藏0
  • JS中如何理解浮点数?

    摘要:本文通过介绍的二进制存储标准来理解浮点数运算精度问题,和理解对象的等属性值是如何取值的,最后介绍了一些常用的浮点数精度运算解决方案。浮点数精度运算解决方案关于浮点数运算精度丢失的问题,不同场景可以有不同的解决方案。 本文由云+社区发表 相信大家在平常的 JavaScript 开发中,都有遇到过浮点数运算精度误差的问题,比如 console.log(0.1+0.2===0.3)// fa...

    bang590 评论0 收藏0
  • 一个函数让你看懂 'Why 0.1+0.2!=0.3'

    摘要:的二进制科学计数法第位是,所以就有了下面的结果有着同样的问题,其实正是由于这样的存储,在这里有了精度丢失,导致了。最大安全数字中表示最大安全数字计算结果是,即在这个数范围内不会出现精度丢失小数除外这个数实际上是。是一个任意精度的整数。 话不多说,先上代码 function judgeFloat(n, m) { const binaryN = n.toString(2...

    mushang 评论0 收藏0

发表评论

0条评论

awkj

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<