说到浮点数,在计算机里面不像整数,是分为三个部分的
指数位的长度决定了浮点数的表示范围,而尾数位的长度决定了浮点数的表示精度(小数点的位数)比如以float
类型举例,float
类型一般占32位,其中1位符号位,8位指数位,23位尾数位,因为指数位是8位,2 ^ 8 = 256,但是由于这个指数位有1位表示的是指数的正负,所以指数的表示范围是-128 ~
127,又因为负数是按照补码的形式存放的,放在这里理解就是说负指数决定了浮点数所能表达的绝对值最小的非零数(小数部分,即精度),而正指数决定了浮点数所能表达的绝对值最大的数(整数部分,即表示范围)。因此float
类型能够表示的范围就是 -(2 ^ 128) ~ +(2 ^ 128),也就是-3.4 * 10 ^ 38 ~
+3.4 * 10 ^ 38,虽然小数部分是2 ^ 127,但是很明显计算机不可能做的到这么高的精度,所以这里的精度其实是由尾数部分决定的,而float
的位数有23位,也就是说2 ^ 23 =
8388608一共7位数字,也就是说可以保证最大6位的精度。这样就清楚了浮点型数据在计算机里面的表示方法,各自的取值范围以及精度,那么各个浮点数不同部分所占的位数是多少呢?
清楚了浮点数的表示我们来看看float.h里面的内容吧,其实float.h主要定义了一些和浮点数有关系的限制,其中的FLT
代表float
,DBL
代表double
,LDBL
代表long double
,主要有如下进制
FLT_RADIX
默认值是2,表示指数是以2进制表示
小数点后的位数,就是四舍五入后肯定能保证的精度
FLT_DIG
默认值是6,表示float
类型的变量小数点后的位数是6位
DBL_DIG
默认值是15,表示double
类型的变量小数点后的位数是15位
FLT_ROUNDS
,0代表向0,1代表向最近的,2代表向正无穷,3代表向负无穷,-1代表不确定
float.h里面的内容差不多就这么多了,可能不同机器上有些数值不一样,不过参考前面的应该能明白是什么意思,有写的不对的地方,希望各位能留言批评指正