浮点数因为存储形式的原因不能直接和0值比较,当要判断一个浮点数是否等于0时;
fabs(x)<=1e-6 就是认为是0了//abs是int的绝对值;fabs是float的绝对值
float的精度误差在1e-6;double精度误差在1e-15
所以要判断一个单精度浮点数:则是if( abs(f) <= 1e-6);
要判断一个双精度浮点数:则是if( abs(f) <= 1e-15 );
出现-0.00的情况,需要+0.00
#include <stdio.h>
#include<math.h>
int main()
{
float a, b, c;
while (scanf("%f %f %f", &a, &b, &c) == 3)
{
float deta;
deta = b * b - 4 * a * c;
float count,count1;
if (fabs(a)< 1e-6)
{
printf("Not quadratic equation\n");
}
else if (deta == 0)
{
count = (-b) / (2 * a);
printf("x1=x2=%.2f\n", 0+count);//出现-0.00的情况,需要+0.00
}
else if (deta > 0)
{
count = ( - b + pow(deta, 0.5)) / (2 * a);
count1 = (-b - pow(deta, 0.5)) / (2 * a);
printf("x1=%.2f;x2=%.2f\n", count1,count);
}
else if (deta < 0)
{
float data;
count = (-b )/ (2 * a);
data = pow((-deta), 0.5)/(2*a);
printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n", count, data, count, data);
}
}
return 0;
}