判断double型值是否相等。
判断两个double型是否相等,不能用判断int型的方法去比较,这也是对初学者容易出现的错误,刚开始我在做PUK1730那个题目时候,就犯了这样的毛病。做出来的答案总是错的。
因为我用double a,double b,if(a==b)...这样就是错的,后来在网上看了别人的代码才知道,比较两个double型:fabs(a-b)<=eps,(eps=1e-9),eps的值是起到精确度的作用。这大概是用到了极限的思想了。
对PUK1730的题目,是要我们求a^b=c;求满足该等式下,b的最大值。输入c,输出b的最大值。
本题由三个要注意的地方。
1:输入的数很大,应用long long型。
2:两个double的比较,应用fabs(a-b)<=eps,(eps=1e-9).
3:输入的数可能为负数,要判断指数的奇偶。
本题代码如下:
#include<stdio.h> #include<math.h> #define eps 1e-12 int main() { long long n; int flag=0,i; while(scanf("%I64d",&n),n) { if(n<0) flag=1,n=-n; for(i=32;i>=1;i--) { double num=pow(n,1.0/i); double a=floor(num); //取下限 double b=ceil(num); //取上限 if(fabs(num-a)<=eps||fabs(b-num)<=eps) //判断num的值接近那个整数。 if(!flag||flag&&(i&1)) break; } printf("%d\n",i); flag=0; } return 0; }