attempted to write a method for finding the square root. it seems to have done everything correctly, but at startup it gives an error:
Exception in thread "main" java.lang.StackOverflowError at hello.Sqrt.midIter(Sqrt.java:23) at hello.Sqrt.midIter(Sqrt.java:23) at hello.Sqrt.midIter(Sqrt.java:23) at hello.Sqrt.midIter(Sqrt.java:23) at hello.Sqrt.midIter(Sqrt.java:23) The program code is as follows:
public static double middler(double arg1, double arg2){//находит число, стоящее в средине диапазона заданных в аргументах значениях double res = (arg2+(arg1-arg2)/2); return res; } /**/ private static double midIter(double sqr, double app, double low){//метод уменьшает диапазон (как в двоичном поиске) пока квадрат средины диапазона не будет входить в пределы погрешности double mid = middler(app, low);//нахождение средины диапазона double sq=mid*mid;//возведения средины диапазона в квадрат boolean ss = ((sqr-0.01d)<sq && sq<(sqr+0.01d));//проверка вхождения квадрата в диапазон допустиых значений if(ss)//если квадрат входит в диапазон допустимых значений, возвращается найденное число return mid; else{//если же нет, диапазон, заданный аргументами, делится на две части и происходит поиск в более подходящей из них if(sq>sqr) return midIter(sqr, sq, low);//вызывется этот же метод (рекурсия) с новыми значениями диапазона else return midIter(sqr,app, sq);//вызывется этот же метод (рекурсия) с новыми значениями диапазона } } public static double sQrt(double arg){//метод, который вызывается первым и вызывает все остальные. в качестве аргумента принимает число, корень которого нужно найти double apBound = arg;//верхняя граница double lBound = 0f;//нижняя граница double m = middler(apBound, lBound); if(m*m==arg) return m; else{ return midIter(arg, apBound, lBound); } }