2016-10-21 53 views
3

這是我到目前爲止有:平方根迭代使用X1 =(X0 - A/X0)/ 2

Public static double Sqrt (double a){ 
    double xOld = a/2; 
    double xNew = 0; 
    while (Math.abs(xOld - xNew) >= 0.0001 { 
       xNew = (xOld + a/xOld)/2; 
       xNew = xOld; 
    } 
} 

我需要使用算法X1 =(X0 - A/X0)/ 2找到數字的近似平方根。 a是原始數字,x0從數值a/2開始。當我運行這個代碼時,我得到12.5(這是一個/ 2)。我需要幫助的是xNew初始化值和while循環的最後一行。感謝您的幫助

+0

你從哪裏得到這個公式? –

回答

0

您可能想要在循環結束時輸入xOld = xNew,因爲您現在設置的方式會立即覆蓋您剛剛計算的值xNew

但以上是不夠的。如果xNewxOld在循環結束時相等,則保證在給定測試條件的情況下,while循環將在下一個循環中退出。嘗試在while循環中使用不同的條件,例如Math.abs(a - xNew*xNew) >= 0.0001或類似條件。

另一種方法是保持測試條件不變,但是您必須在while循環中交換兩條語句的順序,仍然執行xOld = xNew

+0

不,你需要引入一個臨時變量'temp = xNew',然後在改變'xNew'後,用'xOld = temp'替換'Xnew = xOld'。 –

+0

這也可以工作。它與上面第三段中提出的方式相比增加了一個額外的變量,但可能更容易概念化。 –

1

嘗試這種對SIZE:

Public static double Sqrt(double a) throws IllegalArgumentException { 

    if (a < 0.0) throw new IllegalArgumentException(); 

    double aSqrt = a/2.0; 
    while (Math.abs(a - aSqrt*aSqrt) >= 0.0001) { // I'd use a smaller tolerance 
      double aSqrtPrev = aSqrt; 
      aSqrt = (aSqrtPrev + a/aSqrtPrev)/2.0; 
    } 

    return aSqrt ; 
}