1.实数的表示
定点法:小数点固定的位于实数所有数字中间的某个位置,小数点位置决定了固定位数的整数部分和小数部分,整数位数决定了实数的范围,小数位数决定了实数的精度。(嵌入式系统中应用)
浮点数表示:
利用科学技术法表示实数,实数由尾数(Mantissa),基数(Base),指数(Exponent),符号位组成,尾数中数字的个数称为精度。
IEEE表示标准
1) 32位浮点数表示(单精度) >> 符合位(1)+指数位(8)+尾数位(23)
2) 64位浮点数表示(双精度) >> 符合位(1)+指数位(11)+尾数(52)
由于指数可正可负,8位指数位表示的指数范围应该为:-127-128,11位指数范围为:-1023-1024. 所以指数部分的存储采用移位存储,存储的数据为原始数据+127(8位指数),或原始数据+1023(16位指数)。IEEE规定尾数中的最高位1可以省去。
实数表示浮点数,小数部分*2, 如果小数部分*2一直得不到整数,就会超出尾数的位数,所以浮点数表示实数会有误差,并且单精度与双精度间的转换也可能出现误差,例如float a = 2.2。
2. 浮点数比较大小
由于浮点数对实数的表示可能存在误差以及单双精度转换间的可能出现误差,所以浮点数间是不能用==,!=比较大小的,否则可能会出现错误结果, 同理也是不能用==或!=判定浮点数是否为0。
浮点数比较大小:
bool IsEqual(float a, float b, float epsilon)
{
if(fabs(a - b) < epsilon)
return TRUE;
else
return FLASE;
}