c语言float四舍五入 float型保留几位小数和有效数字( 二 )


3、对于E(指数)E是一个字节(8位)整数所以E的取值范围为(0~ 255),但是在计数中指数是可以为负的,所以规定在存入E时,在它原本的值上加上中间数(127),在使用时减去中间数(127),这样E的真正取值范围就成了(-127~128) 。
因此对于32为单精度浮点数:在IEEE-754标准中,32位浮点数X的真值可表示为:
X = (-1)^S×(1.M)×2 ^(E-127);
精度丢失了解了float型数据的存储原理,接下来了解一下float精度丢失的原因,以浮点数2.7为例:
首先,十进制转换成二进制 。由于2.7无法用二进制精确表示,因此此处出现一次精度丢失 。
2.7 => 10.10110011001…
然后,用IEEE标准表示二进制浮点数,得到s=0,M=1.010110011001…,E=1 。
10.1011001… => (-1)^0 × 1.01011001… × 2^1
最后,按照IEEE标准保存数据 。此时是单精度浮点数,M只能保存小数点后23位,多余的部分被丢弃了,因此此处又一次精度丢失 。

c语言float四舍五入 float型保留几位小数和有效数字


精度丢失示意
溢出既然存储有位数限制,那么溢出就很好理解了 。超过最大能表示的数就是上溢,超过最小能表示的数就是下溢,只要计算出最大和最小能表示的数十多大就可以得出上下溢出的极限:
上溢极限:
c语言float四舍五入 float型保留几位小数和有效数字


上溢极限
下溢极限:
c语言float四舍五入 float型保留几位小数和有效数字


【c语言float四舍五入 float型保留几位小数和有效数字】下溢极限

推荐阅读