浮点型和零比较时只能用范围比较,不能用“==”来比较:因为有些浮点数在内存中无法精确的储存,这样就会有精度流失。
怎样来比较呢?设一个能够接受的精度,保证误差在精度范围内就可以。
正确写法:
#define EXP 0.0000000001
float f=0.00000001;
if((f>-EXP)&&(f<EXP)){
//f意味着无限接近0的数字,就约等于0
}
例题:求一元二次方程的解。
#include<stdio.h>
#include<math.h>
#define EXP 0.0000000001
int main(){
float a,b,c;
printf("Please enter :ax^2+bx+c");
scanf("%f%f%f",&a,&b,&c);
if((a>-EXP)&&(a<EXP){ //a不等于0
printf("此方程不是一元二次方程!\n");
}
else{
float d=a*a-4*a*c;
if((d>-EXP)&&(d<EXP)){ //因为d是浮点型,所以判断时不能直接用0,需要一个精度范围来判断
printf("方程的解为:%f",-b/(2*a));
}else if(d>EXP){
printf("方程的解为:%f,%f",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
}else {
printf("方程无解");
}
}
}