前提・実現したいこと
Javaのプログラミングについてです。
実数aと整数nを入力して、Newton法を実現するプログラミングを考えているのですが、正しい結果が出ません。
発生している問題・エラーメッセージ
例えば、a = 2,n = 2のとき
2.0の2乗根は1.8333333333333333
と出ます。
該当のソースコード
Java
1public class Newton { 2 static double root(double base, int index) { 3 double p = 1; 4 for (int i = 0; i < index; i++) { 5 p = p * base; 6 } 7 return p; 8 } 9 public static void main(String[] args) { 10 double a = Double.parseDouble(args[0]); 11 int n = Integer.parseInt(args[1]); 12 double xPrev = a + 1; 13 double x = a; 14 while (Math.abs(x - xPrev) >= 1e-6) { 15 x = xPrev-(root(xPrev,n) - a) / (n * root(xPrev,n-1)); 16 if (Math.abs(x - xPrev) < 1e-6) break; 17 xPrev = x; 18 } 19 System.out.println(a + "の" + n + "乗根は" + x); 20 } 21}
試したこと
補足情報(FW/ツールのバージョンなど)
コマンドプロンプト
蛇足ですが、rootという関数がありますが、実際は累乗しているのでpowのほうが良いと思います。