关于【浮点数精度】的问题
关于精度误差的关系:
用一道例题来阐述关于浮点数精度的问题( • ̀ω•́ )✧
求解二元一次方程的值~
关于求解二元一次方程,里面有三个变量,a,b,c,所以要考虑到三个值的问题
a,b,c三个值类型为double型,那么在判断是否为零时就自然要想到精度的问题了。
给一个错误的例子:
if(a==0)//error
光是a==0是没有办法判断的,因为a假如是0.000几,就没法包含这种情况,
所以正确的方法如下:
#define EPS 0.000001//精度
if(a>=-EPS&&a<=EPS)//ok
程序代码如下:
//求解方程
#include<stdio.h>
#include<math.h>
#define EPS 0.000001//精度
void Fun(double a,double b,double c)
{
double x1,x2;//两个根
double d=b*b-4*a*c;
if(a>=-EPS&&a<=EPS)//ok,a==0的情况
{
if(b!=EPS)//b!=0
{
x1=x2=-c/b;
printf("x1=%f,x2=%f\n",x1,x2);
}
else
{
printf("无实根");
}
}
else if(-EPS<=d&&d<=EPS)//d==0
{
x1=x2=-b/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
else if(d>EPS)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
else
{
printf("无实根");
}
}
int main()
{
Fun(1,-2,1);
Fun(0,-2,1);
Fun(1,4,2);
return 0;
}
运行结果截图:
欢迎大家交流这一块的内容呀❤祝大家都能0 error(s),0 warning(s)ヾ(✿゚▽゚)ノ