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 版权协议,转载请附上原文出处链接和本声明。