求关于一元二次方程的解时,输入数的类型应该为浮点型。根据一元二次方程三个系数即可判断出所有情况。
这里牵扯到对于零的比较。
定义的浮点数判断是否为零时,将十进制小数转化为二进制存储,由于浮点型float只有把个字节内存二进制原理无法精确存储,所以需要定义一个临界值来衡量精度。 从而拓展到其他浮点数的是否等于准确值。
#define EXP 0.00000000001 //定义测量精度
int main()
{
double a = 0.0;
double b = 0.0;
double c = 0.0;
scanf("%lf%lf%lf", &a, &b, &c);
getchar();
if(a>-EXP && a<EXP)//浮点数需要用临界值来定义精度;
{
printf("不是一元二次方程");
}
else
{
double res = b*b - 4 * a*c;//判断方程有几个跟
if (res > -EXP&&res < EXP)//判断是否为零
{
printf("方程有一个解\n");
printf("%lf", -b / 2*a);
}
else if(res<= -EXP) //保证了判断精度得严谨性,避免深度计算时得矛盾,将整个判断域连接起来
{
printf("该方程无解");
}
else if (res >= EXP)// 同上
{
printf("方程有两个解");
printf("%lf,%lf", (-b + sqrt(res)) / 2*a, (-b - sqrt(res)) / 2*a);
}
getchar();
return 0;
}
getchar();
return 0;
}