は割り当てです:これは効果的なwhileループですか?ここ
「には、例えば、あなたが数与えられているとしましょう、そしてあなたはその 平方根を見つけたいことを行う1つの方法は、答え について非常にラフな推測を開始することです。 X0、その後、次の式 X1 =(X0 + A/X0)を使用して推測を改善/ 2
例えば、我々は9の平方根を検索する場合、我々はX0 = 6、 で始まります x1を使用してx2を計算するなどの手順を繰り返すことができます。この のケースでは、x2 = 3.075とx3となり、x1 =(6 + 9/6)/ 2 = 15/4 = 3.75となります。 = 3.00091。これはコンバージドなのでgは非常に迅速に 正しい答え(3)です。
テクニックを使用して、パラメータの2乗をとる というメソッドをパラメータの平方根を返します。 Math.sqrt
は使用できません。
最初の推測として、/ 2を使用する必要があります。あなたのメソッドは、 まで繰り返され、0.0001未満の2つの連続した見積もりが得られます。他の ワードでは、絶対値が0.0001未満になるまで。あなたは絶対値を計算する Math.abs
を使用することができます。」これは演習では、ループしながら、練習を意味している
。あなたは私が割り当てをした見ての通り、私はそれがうまくいくと思う?しかし、私は解決策に来たのかわかりませんか?言い換えれば、私はここで何を改善すべきか?違ったループを入力する他の方法はありますか?より適切か、そして最後に変数に名前を付ける方法、私のアプローチで良いか、ここで悪い?
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