目录
1.1 类型:float、double、long double
1.2 常见的浮点数:3.1415926、1E10(科学计数法)
1.浮点数
1.1 类型:float、double、long double
1.2 常见的浮点数:3.1415926、1E10(科学计数法)
1.3 浮点数的范围:在float.h中定义,可自行查看
2.浮点数的表示规定
国际标准IEEE(电气和电子工程协会)754,任意一个二进制的浮点数V可以表示为下面的形 式:V = (-1)^S * M * 2^E
- S为0表示正数,为1表示负数
- M表示是有效数字,M大于等于1小于2
- E表示指数
例如:5.5的二进制表示为101.1,用科学技术法表示即为5.5 = 1.01*2^2(指数E就是小数点向右移动的位数),那么S = 0,M = 1.01,E = 2。
这样表示之后,我们就可以知道浮点数的存储应当包含S、M、E这三个部分。接下来我们就来看看浮点数是如何在计算机中存储的。
3.浮点数的存储和取出
3.1浮点数的存储
- IEEE754规定,浮点数在内存中的存储方式如下
- 通过上图我们知道,float有23个bit位来存储有效位数,double有52个bit位来存储有效位数,因而有效数字有限精度也就有限,为了尽量提高精度IEEE754规定只把M的小数部分存入,因为科学计数法下M的整数部分只能为1,存入时只存小数部分而读取数据时则将1加上即可,从而多出一位提高精度。
- 而对于指数E不能直接存入对应位置,因为IEEE754规定存E的部分只能存入正数,即没有符号位,但是实际情况下是存在E为负数的情况的,那么这时IEEE754就规定将E加上一个中值在转化为二进制进行存储,例如:float的存放E的8个bit位,能存0~255范围的数,中值就是127;double的存放E的11个bit位,能存0~2047范围的数,中值就是1023。
我们来举个例子的尝试存储,如5.5
3.2浮点数的取出
浮点数的取出S和M就是按原还原,而E的存放样式不同要分三种情况:
- E的存放不全为1且不全为0:二进制转换为十进制之后,减去中值就得到指数E。
- E的存放全为0:存放全为0说明E的值小于等于-127,那么表示的浮点数已经很小很小了,接近于0,故而用来表示+0或-0。
- E的存放全为1:说明E大于等于128,同全为0的推测,这种情况就表示+∞或-∞,在输出显示器上为+inf或-inf来表示。