浮点数精度问题
例子:
#include “stdio.h”
int main()
{
float a=123456789;
printf("%f",a);
}
结果:
说明浮点数存在误差问题–浮点数的误差EPS
//方程的根有两个,不能返回
void Fun(double a,double b,double c)//todo,if else if else
{
#define EPS 0.0000001 //浮点数误差
//#define 宏名 宏替换的数据 特点:有名字,一改全改
double d = bb - 4a*c;
double x1;
double x2;
//if(a == 0)//error
if(-EPS<=a && a<=EPS)//a==0,(float有误差,若直接写a==0会有误差)
{
x1 = x2 = -c/b;
printf("%f,%f\n",x1,x2);
}
else
{
if(-EPS<=d && d<=EPS)//d == 0
{
x1 = x2 = -b/(2*a);
printf("%f,%f\n",x1,x2);
}
else
{
if(d > EPS)//d>0
{
x1 = (-b+sqrt(d))/(2*a);
x2 = (-b-sqrt(d))/(2*a);
printf("%f,%f\n",x1,x2);
}
else//d < 0
{
printf("无实根\n");
}
}
}
}
int main(void)
{
Fun(0,1,2);
Fun(1,4,1);
Fun(1,2,1);
Fun(2,1,2);
return 0;
}