Я только начал с Java, и в качестве первого проекта я пишу программу, которая находит корни (корень куба в данном случае) заданного числа. В настоящее время я пытаюсь Ньютона-Ральпсона добиться этого. Вот код
import java.util.Scanner;
import static java.lang.Math.abs;
public class newClass {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Number whose cube root u wanna find:");
Double number = input.nextDouble();
Double epsilon = 0.0001;
Double ans = number/2.00;
while (abs((abs(number) - abs(Math.pow(ans,3))))>epsilon){
System.out.println("in loop");
ans = ans - ((Math.pow(ans,3) - number)/(3*Math.pow(ans,2)));
System.out.println(ans);
if ((number - ans)<=epsilon){
System.out.println(ans);
}
}
//System.out.println(Math.pow(number,1.0/3.0));
}
}
это работает только до 11-значных чисел, после чего он становится слишком большим для обработки IDE. Но если я просто использую Math.pow(number,1.0/3.0)
, он работает для гораздо больших чисел и вычисляет его в кратчайшие сроки.
Итак, каков алгоритм, который использует Math.pow()
, который дает мгновенный ответ?
Я понимаю, что мой метод основан на угадывании, и я полагаю, что Math.pow()
может фактически вычислять ответ, но как?