2016-11-05 81 views
-1

對於正實數,rth根給出爲e ^(ln(x)/ r) 對於負實數,如果r是奇數,則rth根給出爲-e ^(ln | x |/r) 如果r是即使在當時負數的實際RTH根本不存在這是否正確計算第n根?

static double rthRoot (double r, double x) 
{ 
    double y; 

    if (x > 0) 
    { 
     y = Math.Exp((Math.Log(x))/r); 
    } 

    if (r+1 % 2 == 0) 
    { 
     if (x < 0) 
     { 
      y = -(Math.Exp((Math.Log(Math.Abs(x)))/r)); 
     } 
    } 
}   
+2

檢查這個最簡單的方法是,當您傳遞知道結果的值時,看看是否給出了正確的結果。如果它爲這些情況返回正確的結果,那麼其他人應該可以。 – ChrisF

+1

一旦你回來,這將是正確的:-) –

回答

2

有兩個錯誤在你的代碼:

  1. 您還沒有rthRoot返回一個值。您需要退回y,這將迫使您解決額外的問題;如何處理像rthRoot(2, -4)這樣的電話。你想要返回一個具體的價值(double.Nan),你想拋出一個ArgumentException或...?
  2. if (r + 1 % 2 == 0)是不是在做你認爲它在做的事情。你的代碼相當於if (r + (1 % 2) == 0),這顯然不是你想要的。正確的代碼應該是if ((r + 1) % 2 == 0)或更簡單和更易讀的if (r % 2 != 0)這是檢查奇數的標準方法。
+0

謝謝你的建議。當我把y返回時;在方法rthRoot結束時,我得到一個錯誤,說使用未賦值的變量y。我在main下使用rthRoot,所以我不確定現在有什麼錯誤 –

+0

@ConorWalsh如果我調用'rthRoot(2,-4)',那麼'y'有什麼值?在達到'return y;'之前,在你的代碼中找出你已經設置了'y'值的位置。 – InBetween

+0

@ConorWalsh答案是不存在的。 C#不允許使用單位變量。在局部變量的情況下,您需要*明確*自己初始化它們。在你的情況下,一個好的選擇是用'double y = double.Nan;'在聲明點處初始化'y',這樣代碼中的變化就會變得很小。 – InBetween