как я могу создать метод, который возвращает sqrt данного nunber?
Например: sqrt (16) возвращает 4 и sqrt (5) возвращает 2.3...
Я использую Java и знаю функцию API Math.sqrt()
, но мне нужен сам метод.
как я могу создать метод, который возвращает sqrt данного nunber?
Например: sqrt (16) возвращает 4 и sqrt (5) возвращает 2.3...
Я использую Java и знаю функцию API Math.sqrt()
, но мне нужен сам метод.
Java-программа для определения квадратного корня из заданного числа без использования встроенных функций
public class Sqrt
{
public static void main(String[] args)
{
//Number for which square root is to be found
double number = Double.parseDouble(args[0]);
//This method finds out the square root
findSquareRoot(number);
}
/*This method finds out the square root without using
any built-in functions and displays it */
public static void findSquareRoot(double number)
{
boolean isPositiveNumber = true;
double g1;
//if the number given is a 0
if(number==0)
{
System.out.println("Square root of "+number+" = "+0);
}
//If the number given is a -ve number
else if(number<0)
{
number=-number;
isPositiveNumber = false;
}
//Proceeding to find out square root of the number
double squareRoot = number/2;
do
{
g1=squareRoot;
squareRoot = (g1 + (number/g1))/2;
}
while((g1-squareRoot)!=0);
//Displays square root in the case of a positive number
if(isPositiveNumber)
{
System.out.println("Square roots of "+number+" are ");
System.out.println("+"+squareRoot);
System.out.println("-"+squareRoot);
}
//Displays square root in the case of a -ve number
else
{
System.out.println("Square roots of -"+number+" are ");
System.out.println("+"+squareRoot+" i");
System.out.println("-"+squareRoot+" i");
}
}
}
Вам, вероятно, придется использовать некоторый метод приближения.
Посмотрите
Вот о чем подумать:
Чтобы найти квадратный корень, вам просто нужно найти число, которое поднято до степени 2 (хотя просто умножение само по себе намного проще программно;)) возвращает результат.
Итак, начните с догадки. Если продукт слишком мал, угадайте больше. Если новый продукт слишком велик, вы его сузили - догадайтесь где-то посередине. Вы видите, куда я иду...
В зависимости от вашей потребности в точности и/или производительности, конечно, есть много способов. Решение, намеченное в этом сообщении, ни в коем случае не является лучшим в любой из этих категорий, но дает вам ключ к одному пути.
В этой версии используется метод Ньютона, наиболее распространенный метод вычисления sqrt, и не будет проверять, что входной файл на самом деле является целым числом, но он должен решить вашу проблему просто.
int num = Integer.parseInt(input("Please input an integer to be square rooted."));
while(0.0001 < Math.abs(guess * guess - num)){
guess = (guess + num / guess) / 2;
}
output(Integer.toString(guess));
Вторая строка проверяет, насколько близка текущая догадка к истинному результату, и если достаточно близко разрывает цикл. Третья строка использует метод Ньютона, чтобы стать все ближе к истинному значению sqrt. Надеюсь, это поможет.:)
Тот, который я изобрел (или заново изобретенный, если это возможно), таков:
Следующее угадывание= ((Guess 2) + N)/(2 × Guess)
Пример:
Квадратный корень 10
, сначала предположим, скажем, 10
:
Guess1 = (100+10)/20=5.5
Guess2 = (30.25+10)/(2*5.5)= 3.6590909090...
Guess3 = (13.3889+10)/(3.65909090*2)=3.196005082...
и др.
Получает вас 3.16227766
... или около того.
На самом деле это упрощенная версия моего оригинального метода
Guess + ((N + Guess 2)/(2 × Guess))
который выглядит ужасно, как метод Бахшали.