浮点数精度问题 --- C语言

浮点数精度问题
例子:
#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;
}

发布了17 篇原创文章 · 获赞 4 · 访问量 1605

猜你喜欢

转载自blog.csdn.net/qq_43411866/article/details/84562176