C语言浮点数相关知识

目录

引言:

浮点数在内存中的存储

​编辑

注意

总结

感想

double与float的书写注意 

“浮点数与0 的比较”

现象

精度区间

自主设置精度区间

使用C语言自带的精度区间

补充


引言:

本文主要围绕C语言浮点数的相关知识,就浮点数在内存中的存储,浮点数的double和float类型书写时的注意以及《C语言深度解剖》这本书中“浮点数与0 的比较”章节的内容展开。

浮点数在内存中的存储

对于浮点数的储存就是搞懂三个量,我们知道常见的浮点数有3.14159,有用科学计数法写的1E10等,包括的类型也比较丰富如float ,double,long double。并且当我们使用printf函数分别借助%f,%d打印同一个数时,结果也会不同,原因还是归结于整型和浮点型在内存中不同的存储形式。浮点数在内存中的存储由国际标准IEEE(电气和电子工程协会)754规定,虽然刚开始可能难以理解,但确实可以从中发觉到人类智慧的结晶。

对于浮点数的存储分如图三个部分,用于表示正负的数存在第一位,有效数字,即将待存储的二进制数字转化成科学计数法表示后,小数点后的所有数字,应该注意的是这里不包括小数点前面的那一位数字,因为对于小数点前的数,在使用科学计数法时,只要储存的不是0.0000000,那么这个数就一定是1。这就是最体现智慧的地方,为了尽可能的多存储数字,省略储存这个1 的 位,把空间留给小数点后面的数,也就是有效数字。(以下是32位浮点数和64位浮点数在内存中的分配情况)

对于E我们先给结论,规定当存入E的真实值之前,对32位浮点型需加上127,对4位,需加上1023用E表示指数位,正好与科学计数法互补,同时E的值也会更复杂,因为在前面的科学计数法中如果待存储的数是一个很大的数,那自然E会是一个正数,如果这个数字很小,E就有可能是负数。所以,为解决这个问题,IEEE754创造性的提出了中间数来弥补这个漏洞,因为如果我们也像存储整个待存储的数字的符号一样,又使用一个S势必会浪费一个空间。

值得注意的是在32位浮点数的存储中,E可以占到8个比特位,可表示的正数范围是0~255,而中间数字是127,所以实际E的值可以是-127~128,可能是考虑到E如果在[ -255,-127 )和( 128,255 ]以内的话,表示的数字太小或太大,故规定中间数为127,真的十分巧妙。64位同理。

注意

E的值有

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值