浮点数比大小(C语言版)

  • Post author:
  • Post category:其他



1.浮点数可以直接用大于号小于号等于直接比大小吗?

可以是可以,但是只能在最大的精度范围内,否则会有错误。所以最好不要直接比。


2.如何进行浮点数的比较?

  • 宏定义一个变量为EPS(变量名自己取),EPS是一个很小的数,接近于0
  • 使EPS的值为1e-7(表示0.0000001,指数计数,e前的1和e后的-不可省略)
  • 利用求绝对值的fabs()函数(记得写头文件math.h)eg:fas(-1.2)=1.2
  • 举个例子

输入两个浮点数判断两个数是否相等

#include <stdio.h>
#define EPS 1e-7
int main(){
	float a,b;
	scanf("%f %f",&a,&b);
	if(fabs(a-b)<=EPS){ //a和b的误差接近于0 
		printf("a==b");
	}
	return 0;
}


3.相关例题(一元二次方程求解)

利用公式 :

求一元二次方程 ax^2+bx+c=0ax2+bx+c=0 的根,其中 a 不等于 0。结果要求精确到小数点后 5 位。

输入格式

输入一行,包含三个浮点数 a,b,c(它们之间以一个空格分开),分别表示方程 ax^2+bx+c=0的系数。

输出格式

输出一行,表示方程的解。

若两个实根相等,则输出形式为:

x1=x2=aaaa

若两个实根不等,在满足根小者在前的原则,则输出形式为:

x1=aaaa;x2=bbbb

若无实根输出

No answer!

所有输出部分要求精确到小数点后 5 位,数字、符号之间没有空格。

代码:

#include <stdio.h>
#include <math.h>
#define EPS 1e-7
int main()
{
	double a,b,c,x1,x2;
	scanf("%lf %lf %lf",&a,&b,&c);
	double delta;
	if(fabs(a)<=EPS){	//判断a的值是否为0 
	    return 0;       //如果a为0直接结束该程序
	}else{
	delta=(b*b-4*a*c)*1.0;
	x1=(-b-sqrt(delta))/(2.0*a);    //sqrt()函数功能是开平方根
	x2=(-b+sqrt(delta))/(2.0*a);
	if(fabs(delta)<=EPS){           //fabs()函数功能是求绝对值,判断delta的是否为0
		printf("x1=x2=%.5lf",x1);
		return 0;
	}else if(delta>EPS){
		if(x1<x2){                  //按照题目要求将数值小的解放在前面
			printf("x1=%.5lf;x2=%.5lf",x1,x2);
		}else{
			printf("x1=%.5lf;x2=%.5lf",x2,x1);
		}
		return 0;
	}else{
		printf("No answer!");
		return 0;
	}
}
	return 0;
}

今天的分享就到这里啦!



版权声明:本文为m0_62101546原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。