float与double的范围和精度.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

float与double的范围和精度

float和double的区别

1.double是双精度浮点数,内存占8个字节,效数字16位,表⽰范围是-1.79E+308~-1.79E+308。

float是单精度浮点数,内存占4个字节,效数字8位,表⽰范围是-3.40E+38~3.40E+38。

2.两者处理速度不同,CPU处理float的速度⽐处理double快。double的精度⾼,double消耗内存是float的两倍。

3.如果不声明,⼩数默认是double类型,⽤float时需要进⾏强转,或者在⼩数后加上f。

float与double的范围和精度

1范围

float和double的范围是由指数的位数来决定的。

float的指数位8位,⽽double的指数位11位,分布如下:

float:

11bbiitt((符符号号位位))88bbiittss((指指数数位位))2233bbiittss((尾尾数数位位))

double:

11bbiitt((符符号号位位))1111bbiittss((指指数数位位))5522bbiittss((尾尾数数位位))

在数学中,特别是在计算机相关的数字(浮点数)问题的表述中,⼀个基本表达法:

valueoffloating-point=significandxbase^exponent,withsign

译为中⽂表达即为:

(浮点)数值=尾数×底数^指数,(附加正负号)

于是,float的指数范围为-127~128,⽽double的指数范围为-1023~1024,并且指数位是按补码的形式来划分的。其中负指数决定了

浮点数所能表达的绝对值最⼩的数;⽽正指数决定了浮点数所能表达的绝对值最⼤的数,也即决定了浮点数的取值范围。

float的范围为-2^128~+2^128,也即-3.40E+38~+3.40E+38;double的范围为-2^1024~+2^1024,也即-1.79E+308~

+1.79E+308。

2精度

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是⼀个隐含着的“1”,由于它

是不变的,故不能对精度造成影响。

float:2^23=8388608,⼀共七位,这意味着最多能7位效数字,但绝对能保证的为6位,也即float的精度为6~7位效数字;

double:2^52=4503599627370496,⼀共16位,同理,double的精度为15~16位。

单精度类型(float)和双精度类型(double)存储

在C语⾔中,对于浮点类型的数据采⽤单精度类型(float)和双精度类型(double)来存储,float数据占⽤32bit,double数据占⽤64bit,我

们在声明⼀个变量floatf=2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存

储⽅式上都是遵从IEEE的规范的,float遵从的是IEEER32.24,⽽double遵从的是R64.53。

R32.24和R64.53的存储⽅式都是⽤科学计数法来存储数据的,科学计数法是将所的数字转换成(±)a.b*10^c的形式,其中a的范围是1

到9共9个整数,b是⼩数点后的所数字,c是10的指数。⽽计算机中存储的都是⼆进制数据,所以存储的数字都要先转化成(±)a.b*2^c

,由于⼆进制中最⼤的数字就是1,所以表⽰法可以写成(±)1.b*2^c的形式,要想存储⼩数就只需要存储(±),b和c就可以了。

float的存储正是将4字节32位划分为了3部分来分别存储正负号,⼩数部分和指数部分的:

1.Sign(1位):⽤来表⽰浮点数是正数还是负数,0表⽰正数,1表⽰负数。

2.Exponent(8位):指数部分。即上⽂提到数字c,但是这⾥不是直接存储c,为了同时表⽰正负指数以

文档评论(0)

iwen博览 + 关注
实名认证
文档贡献者

iwen博览

1亿VIP精品文档

相关文档