判断两个double的值

判断两个double型是否相等,不能用判断int型的方法去比较,这也是对初学者容易出现的错误,刚开始我在做POJ1730那个题目时候,就犯了这样的毛病。做出来的答案总是错的。

因为我用double a,double b,if(a==b)...这样就是错的,后来在网上看了别人的代码才知道,比较两个double型:fabs(a-b)<=eps,(eps=1e-9),eps的值是起到精确度的作用。这大概是用到了极限的思想了。

对POJ1730的题目,是要我们求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),b=ceil(num);   //取下限 ,值要小于num,//取上限 ,只要大于num。                 
        if(num-a<=eps||b-num<=eps)        //判断num的值接近那个整数,在这里两个值得大小已确定,不需要用fabs(求绝对值)。 
        if(!flag||flag&&(i&1))            //奇偶判断。
           break;
         }
      printf("%d\n",i);
      flag=0;
      }
     return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值