判斷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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM