浮点数在计算机中的存储

Posted sooneven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浮点数在计算机中的存储相关的知识,希望对你有一定的参考价值。

一,基础预备知识

1,十进制转换为二进制

 

1.1 整数部分:

连续,除以2,取余数,余数为0或1,53 / 2 = 26R1    26 / 2 = 13R0    13 / 2 = 6R1    6 / 2 = 3 R0   3 / 2  = 1 R1    1/2 = 0R1 ,对应二进制为110101(从右往左)

 

1.2 小数部分:

 连续乘以2,大于1取1,如0.7转换成二进制为:0.7*2 = .4 + 1   0.4*2 = 0.8 + 0   0.8*2 = 0.6 + 1   0.6*2 = 0.2 +1   0.2*2 = 0.4 + 0(进入循 环),对应二进制为10110....(从左往右) 所以十进制53.7转换二进制为:110101.10110(0110循环)

 

2,二进制转换成十进制:

2.1 对应位数次方,分数位为负数次方

 

二,IEEE标准

1,浮点数格式:包含三个部分,符号位(+或者是-),指数位,尾数,格式为+1.bbbb...b*2^p
             

精度 sign exponent mantissa
single 1 8 23
double 1 11 52
long double 1 15 64

例如十进制9,二进制为1001,存储方式为+1.001*2^3

 

2,对double的讨论

2.1   double精度1,二进制为+1.000...00(52个0)*2^0,下一个比1大的数为+1.000...01*2^0,十进制为1+2^(-52)

益普希龙mach为1与比1大的最小浮点数的差值,为2^(-52),9.4---1001.0110----double格式为+1.0010110...1100*2^3

    

2.1   当尾数超出52位时需要舍去余下部分,分为两种:chopping与rounding,其中chopping简单就是把超出52位的扔掉(不好)

 

2.2   rounding:类似于十进制的四舍五入,rounding分为两种情况,当52为以后为:(52位)100....(全为0),进位和舍去取决于哪种使得52为0

其余情况为53为1就进位,为0就舍去

 

2.3 十进制9.4在双精度表示下的误差:9.4---1.110.....1100|110...舍去部分为: .1100*2^(-52)*2^3---十进制为.4*2^(-48),应为53位为1,所以要进一位,增加2^(-52)*2^3---十进制为2^(-49)

所以最后结果为fl(9.4) = 9.4 + 2^(-49) -0.4*2^(-48) = 9.4 + 0.2*2^(-49),误差为0.2*2^(-49)(rounding error)

 

                  


以上是关于浮点数在计算机中的存储的主要内容,如果未能解决你的问题,请参考以下文章

浮点数在计算中的存储

计算机中的定点数与浮点数 浮点数用 正负位 幕数 数字部分来表示

浮点数在计算机中的存储

浮点数的比较

详解c语言整形和浮点数在内存中的存储

C++浮点数误差是啥