【题目描述】
利用公式
,求一元二次方程
的根,其中a不等于0。结果要求精确到小数点后5位。
【输入】
输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程
的系数。
【输出】
输出一行,表示方程的解。
若两个实根相等,则输出形式为:
;
若两个实根不等,在满足根小者在前的原则,则输出形式为:
;
若无实根输出“No answer!”。
所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
【输入样例】
-15.97 19.69 12.02
【输出样例】
x1=-0.44781;x2=1.68075
方式一:double精度修正
#include <cstdio>
#include <cmath>
//在C/C++中,因浮点数的运算(和函数)有可能存在误差,例如假设在经过大量计算后,由于误差的影响,整数1变成了0.9999999999。因此,浮点数只有完全一样才能使用==判断相等,比如double类型的a和b,要判断a==b,在一定的精度范围内比较大小,可以借助修正写法,fabs(a – b) < eps,可以自定义精度esp,esp一般取1e-8左右大小。
#define eps1 1e-10 //定义精度esp 10的-10次方
#define eps2 1e-6 //定义精度esp 10的-6次方
int main()
{
//一元二次方程的解x1=[-b+(b^2-4ac)^(1/2)]/2a ; x2=[-b-(b^2-4ac)^(1/2)]/2a
//当判别式(b^2-4ac)的值等于零时,有两个相等的实数根; 当判别式大于零时,有两个不相等的实数根; 当它小于零时,没有实根。
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
double p;//判别式
double x1,x2;//方程解
p=b*b-4*a*c;
if(p<0 && fabs(<