有关浮点数进行计算比较时要注意的一些小细节
程序员文章站
2024-02-28 21:49:04
...
先看一个有关浮点数除法运算的一个简单例题,也是比较容易出错的题目.
7-117 圆内外 (15分)
小C学英语很努力,可惜学习方法不对,英语成绩不上不下,结果慢慢对英语失去了兴趣,不管怎么说还是上了本地的一所高级中学,成了一个高中生。作为理科生,小C的数理化还是比较不错的,所以经常有女生来请教问题。今天数学老师讲到椭圆方程x2/a2+y2/b2=1 (a,b>0) ,数学老师问,如果已知椭圆方程以及a、b,给定一点(x、y),判断该点相对椭圆的位置。小C听到这个问题笑了, 他知道只要把点坐标代入方程,左边的结果大于1就是椭圆外,小于1为椭圆内。
输入格式:
多组测试数据, 每组测试数给定a b x y,4个整数。(1<=a,b,x,y<=100)
输出格式:
根据相对位置分别输出 “out ellipse” 、 “in ellipse”。(数据中不会出现在椭圆上这种情况)每个输出占一行。
输入样例:
在这里给出一组输入。例如:
1 2 2 2
1 2 0 0
输出样例:
在这里给出相应的输出。例如:
out ellipse
in ellipse
题目很简单,直接往里面带入就可以了,但是要注意它是进行的除法运算,当遇到有浮点数的除法运算时,要注意误差问题!
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double a,b,x,y=0;
double result;
while(cin>>a>>b>>x>>y){
// result=1.0*pow(x,2)/pow(a,2)+1.0*pow(y,2)/pow(b,2);
// if(result-1<1e-6){ 如果用除法运算会有误差,所以让它计算所得的结果减去要比较的数小于一个极小数(1e-6[也就是10的负六次方])
// cout<<"in ellipse"<<endl;
// }
// else {
// cout<<"out ellipse"<<endl;
// }
if(b*b*x*x+a*a*y*y<a*a*b*b){//或者可以直接转变为乘法进行比较运算
cout<<"in ellipse"<<endl;
}
else {
cout<<"out ellipse"<<endl;
}
}
}