2009-11-08 86 views
0
import java.lang.Math; 
public class NewtonIteration { 

    public static void main(String[] args) { 
     System.out.print(rootNofX(2,9)); 
    } 

    // computes x^n 
    public static double power(double x, int n) { 
     if (n==0) { 
      return 1; 
     }  
     double Ergebnis = 1; 
     for (int i=0; i<=Math.abs(n)-1; i++) { 
      Ergebnis *= x; 
     } 
     if (n<0) { 
      Ergebnis = 1/Ergebnis; 
     } 

     return Ergebnis; 
    } 

    // computes x^(1/n) 
    public static double rootNofX(int n, double x) { 
     return power(x, 1/n); 
    } 
} 

每當調用power(x,1/n)時,n將被重置爲0.但是不是n給出的值爲2的rootNofX的參數嗎?爲什麼我的變量設置爲0?

+0

您循環工作?你的例子是試圖找到9的平方根。你是如何看待這個代碼將循環1/2的時間和半乘1 * 9得到3的?你需要一個不同的算法來執行0和1之間的權力。 – jmucchiello 2009-11-08 01:54:05

+0

FYI:x ^(1/2)!= 1 /(x^2) 請重新學習關於指數和對數的法則。 - Jakob Krainz,Lehrstuhl 2 Informatik,Univ。 Erlangen – jakob 2013-11-11 11:11:30

回答

5

嘗試:

// computes x^(1/n) 
    public static double rootNofX(int n, double x) { 
     return power(x, 1.0/n); 
    }

因爲1intnint所以1/n是一個整數除法,其返回0時n不爲1,當n爲0拋出錯誤。

1.0是一個雙重因此它使1.0/n你想要的雙重劃分。

+2

你還必須將方法'power'的參數'n'改爲'double',否則它將不起作用。 – hjhill 2009-11-08 02:07:22

+0

@hjhill:你不需要。嘗試一下。歡呼! :-D – NawaMan 2009-11-08 02:19:52

0

這是因爲你正在使用整數,因此1/2 = 0.5(整數爲0)。將原型更改爲rootNofx(double n, double x)power(double x, double n)

此外,由於rootNofx使用power,在我看來,最好是以相同的方式排列參數,以避免混淆。

+2

2/1是0.5?這一定是我遇到很多麻煩的新數學! :) – 2009-11-08 01:33:29

+0

大聲笑!對不起,我的意思是1/2 :) – 2009-11-08 01:34:17

1

1/n通常會成爲一個分數,但是在聲明你聲明n是整數的情況下。每次都會打小數位!

1

這是因爲功率是以「n」定義爲一個整數,因此1/n總是小於1,當以int存儲時,它將爲零。將「int n」更新爲「double n」。實施例下面:

​​
0

問題是你從rootNofX傳入1/2到一個int,所以它變成零。

0

有後你解決的1/n的四捨五入爲0,你怎麼指望1/n1.0/n

之間有很大的區別考慮一下宣稱n是一個int的真正含義......

相關問題