【数据类型的存储】浮点数的存储

目录

一、十进制数的指数表示形式

二、符号、指数、系数的二进制表示方法

1.如何表示符号

2.如何表示指数

3.如何表示系数

三、总结


ID:HL_5461

一、十进制数的指数表示形式

对于一个十进制数,我们可以 把它以科学计数法进行如下表示:

eg.   0.0066=6.6\times 10^{-3}

即:(+/-)a\times 10^{x}的形式(a为系数,10为底数,x为指数),其中系数a\in [1,10)

相对应的,对于一个十进制数,我们还能有如下表示:

eg.   0.0066=1.6869\times 2^{-8}

即:(+/-)a\times 2^{x}的形式(a为系数,2为底数,x为指数),其中系数a\in [1,2)

如下表格希望能帮助大家更好理解

十进制数指数表示符号系数底数指数小数
0.00666.6\times 10^{-3}+6.610-30.6
0.00661.6869\times 2^{-8}+1.68692-80.6869

a\times 10^{x}这种类型,计算机存储起来是比较困难的,所以计算机对于浮点的存储采用a\times 2^{x}这种形式

知道了存储形式,现在我们将面临以下三个问题:

1.如何表示符号

2.如何表示指数x

3.如何表示系数a


二、符号、指数、系数的二进制表示方法

1.如何表示符号

浮点型的符号表示和整型是一样的,都是将左边第一位作为符号位,1为+,0为-,以单精度浮点型为例:

二进制数符号
1000 0000 0000 0000 0000 0000 0000 0000+
0000 0000 0000 0000 0000 0000 0000 0000

-

2.如何表示指数x

我们将符号位的后几位作为指数位,其中单精度浮点型8位,双进度浮点型11位

同时,为了表示负指数,引入了偏移量这个概念(偏移量:单精度浮点型127,双进度浮点型1023),指数x=指数位-偏移量

我们举例说明:

精度指数位指数位转为十进制数偏移量

指数x

(指数位-偏移量)

单精度浮点型000 0011 0(共8位)61276-127=-121
双精度浮点型000 0000 0110 (共11位)610236-1023=-1017

3.如何表示系数a

系数a是一个在范围[1,2)之间的数,所以我们只需表示出小数部分,再将小数部分加一,就可以得到我们所需要的系数a,所以我们的问题就由“如何表示系数a”变为了“如何表示小数部分”。

(注:非规格化数系数的小数点前一位不是1而是0,用0.f表示,但属于比较少见的情况,在此我们不作讨论)

指数位之后的数字都作为小数位,对于小数位的表示采用与整型不一样的表示方法。将小数位从左至右依次作为2^{-1}2^{-2}2^{-3} ……以此推类直至最后一位

我们还是以一张表格来举例:

精度小数位小数位转为十进制

系数a

(小数位+1)

单精度(32bit)111 0000 0000 0000 0000 0000(共23位)2^{-1}+2^{-2}+2^{-3}=0.8751.875
双进度(64bit)1110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000(共52位)2^{-1}+2^{-2}+2^{-3}=0.8751.875

由此我们不难看出,对于浮点型,计算机一般就是在去通过这个足够长的序列,使得误差保持在一个足够小的范围,并不能保证绝对的精准。


三、总结

最后,我们通过一张表来总结一下:

精度符号位指数位偏移量小数位
单精度1(1位)8(2~9位)12723(10~32位)
双精度1(1位)11(2~12位)102352(13~64位)

若有错误,欢迎大家批评斧正!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是兰兰呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值