這裏是一個任務:這是一個有效的while循環嗎?
「比方說,給你一個號碼,和你想找到它的 平方根一個這樣做的方式是從一個非常粗略的估計大約 了答案, X0,然後使用以下公式 X1 =(X0 + A/X0)/ 2
例如改善的猜測,如果我們想找到9的平方根,並且我們先從X0 = 6, 那麼x1 =(6 + 9/6)/ 2 = 15/4 = 3.75,這更接近 我們可以重複這個程序,用x1來計算x2,依此類推,在這個 的情況下,x2 = 3.075和x3 = 3.00091。所以這是收斂的g很快就在 的正確答案(這是3)。
編寫一個名爲squareRoot
的方法,該方法以雙精度參數和 爲參數,使用此技術返回參數平方根的近似值。您不得使用Math.sqrt
。
作爲初步猜測,您應該使用/ 2。你的方法應該迭代,直到 它得到兩個連續的估計相差小於0.0001;在其他 字樣,直到絕對值小於0.0001。您可以使用 Math.abs
來計算絕對值。」
這是演習旨在實踐while循環。正如你看到我做的任務,我認爲它的工作原理?但我不知道我怎麼來解決呢?換句話說,我應該在這裏提高?是否有任何其他方式以不同的方式進入循環?如何命名變量更合適?最後,是我的方法好還是壞嗎?
public class squareRoot {
public static void main(String args[]){
System.out.println(squareRoot(192.0));
}
public static double squareRoot(double a){
double gs = a/2; //guess
double ig = (gs + (a/gs))/2; //improving guess
double ig1 = (ig + (a/ig))/2; //one more improving guess, ig1
while (Math.abs((ig-ig1)) > 0.0001){ //with ig and ig1, I am entering the loop
ig = (ig1 + (a/ig1))/2;
ig1 = (ig + (a/ig))/2; //ig1 has to be less then ig
}
return ig1;
}
}
您可以命名任何你想要的變量。如果您不確定代碼的功能,請編寫一些測試用例 –
如果您需要撰寫評論以說明縮寫的含義,則可能不應使用縮寫。調用變量'guess'。長名稱比不清楚的短名稱更好。 – Carcigenicate
你會看到'ig =(gs +(a/gs))/ 2'和'ig1 =(ig +(a/ig))/ 2'在循環的內部和外部是如何複製的?這意味着你可能應該使用'do ... while'循環。不過你需要重寫一下。 – Carcigenicate