当前位置: 首页> 汽车> 报价 > 浮点数在内存中的存储

浮点数在内存中的存储

时间:2025/7/13 15:32:44来源:https://blog.csdn.net/2301_80079026/article/details/142151353 浏览次数: 0次

  根据国际标准IEEE(电⽓和电⼦⼯程协会)754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
V   =  (−1) ^S* M ∗ 2^E 
• (−1)S 表⽰符号位,当S=0,V为正数;当S=1,V为负数
• M表⽰有效数字,M是⼤于等于1,⼩于2的
• 2E 表⽰指数位 

列如:5.0(5的二进制为101)=1.01*2^2=(-1)^0*1.01*2^2

对于任意一个浮点数我们都可以将其写类似于科学计数法的方式,只是这里使用的是二进制,同时用-1的0次或者1次来表示,即都可以写成IEEE754所规定的标准,其实计算机在进行储存的时候,就是储存的S,M,E这三个数

对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M

计算机对于M的存储

由于每一个M都有一个1,所以计算机就可以直接储存M的小数部分,这样就避免了浪费一个bit位,多一位来存储小数,可以提升精度。

十进制小数转化为二进制

对于小数点后面的部分,一般的放法是乘2法,即对于十进制的小数先乘以2,要是有进位1,就拿出来,要是没有,就拿出来0,然后继续拿出乘以后的小数点乘以2,这样一直循环,直到乘出来数字没有小数了,按照先后顺序排列这些拿出来的0或者1,即为对应的二进制数列

但对于一些相对于简单的,我们就可以根据二进制中小数部分的权重来直接写出,0.11111对应的权重从左到右分别就是2的负一次(0.5),2的负二次(0.25),2的负三次(0.125).....,我们通过这些组合就不难看出一些简单的小数,列如0.75就是0.5+0.25即二进制0.11

同时,对于一些小数,3.14无法精确的算出其二进制的小数位,此时计算机就会储存一个非常接近的数字来表示它

计算机对于E的储存

我们知道,在科学计数法中,E既可以是正数,也可以是负数,那么我们该怎么储存呢......

IEEE754于是就规定,我们在存储的时候,必须要给E加上一个中间值,让E成为一个正数,对于8位的E,中间值位127,对于11位的E,这个中间值位1023。列如:2^10,E=10,对于8位E来说,储存的数字就等于10+127=137。

对于一些特殊的E

1.E全为1,2的这么多次将是一个极其大的数字,计算机将认为存储的是一个无穷大的数字

2.E全为0,2的负这么多次将是一个非常小的数字,计算机对于此类数字E=1-127(1-1023)表示真实值,同时M不再加上1,计算机用来表示一个非常接近于0的数字,或则是正负0.

列如​​​​​​​

                                                                                                                                                                                                                                                                                                                                                                                           

关键字:浮点数在内存中的存储

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: