C语言中浮点类型的比较
我们都知道C中整型数据在计算机里是以二进制数存储的,但是关于浮点数呢比如float a=125.125
计算机将其转化为1111101.001B的二进制数,可是问题在于计算机根本不认识小数点。
历史上计算机科学家们曾提出过多种解决方案,最终获得广泛应用的是IEEE 754标准中的方案,目前最新版的标准是IEEE std 754-2008。该标准提出数字系统中的浮点数是对数学中的实数(小数)的近似,同时该标准规定表达浮点数的0、1序列被分为三部分(三个域):
详细参考 浮点数的大小比较为什么不能用等号?
实际上浮点型数据在计算机中的存储是一种近似存储,例如上面提到的a=125.125,在计算机中只是无限逼近,总有误差小量。
这个误差小量一般认为exp(-6),所以在比较浮点类型的数据时就要考虑这个小量。
Example 两个浮点型数据float m,float n
,假设已经有确切值,现比较大小。
包含#include “math.h”
,调用里面的fabs()函数,这个函数是用来求浮点型数据的绝对值的。
#include "stdio.h"
#include "math.h"
int main(void)
{
/*比较两个浮点数大小*/
float m,n;
scanf("%f%f",&m,&n);
if((m>n)&&(fabs(m-n)>1e-6))//满足两个浮点数之差的绝对值大于1e-6,大于成立
{
printf("m>n ok");
}
else if((m<n)&&(fabs(m-n)>1e-6))//满足两个浮点数之差的绝对值大于1e-6,小于成立
{
printf("m<n ok");
}
else if(fabs(m-n)<1e-6)//满足两个浮点数之差的绝对值小于1e-6,等于成立
{
printf("m==n ok");
}
return 0;
}