浮点型数据是表示具有小数点的实数的。为什么在C中把实数称为浮点数呢?在C语言中,实数是以指数形式存放在存储单元中的。我们都知道实数是一个连续的无穷集合,即使在0—1这个区间也会有无穷个数,计算机会把1.0000000000001默认为1,也会把0.99999999999默认为1,这样,就会出现误差。
在数学中,我们常常会看到“误差为1m”“误差范围”这样的字眼。比如:官方公布A、B两地距离为200m,存在1m误差。但是测量数据出现199.9,189.9,201.1这样的数据,显然,只有199.9这组数据更符合实际,因为存在1m误差的合理范围为[199,201],而189.9,201.1都不在这个范围内。因此我们可以做出这种总结:设真实值为x,给出值为y,误差为r;则:y-r<=x<=y+r。
#define EPS 0.000001
void Fun(double a,double b,double c)
{
double x1;
double x2;
double d=b*b-4*a*c;
if(0-EPS<=a&&a<=EPS)//判断a==0
{
x1=x2=-c/b;
printf("x1=%f,x2=%f\n",x1,x2);
}
else if(0-EPS<=d&&d<=EPS)//判断d==0
{
x1=x2=-b/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
else if(d>EPS)//判断d>0
{
x1=(-b+sqrt(d)/(2*a));
x2=(-b-sqrt(d)/(2*a));
printf("x1=%f,x2=%f\n",x1,x2);
}
else
{
printf("无实根!\n");
}
}