关于【浮点数精度】的问题

关于【浮点数精度】的问题

关于精度误差的关系:

用一道例题来阐述关于浮点数精度的问题( • ̀ω•́ )✧

求解二元一次方程的值~


关于求解二元一次方程,里面有三个变量,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)ヾ(✿゚▽゚)ノ

猜你喜欢

转载自blog.csdn.net/VVVv_0427/article/details/80208338