2016-10-21 57 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 ; 
}