Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 5
Регистрация: 31.03.2014
Сообщений: 102
1

Ошибка в реализации алгоритма извлечения квадратного корня

18.08.2014, 03:47. Просмотров 1975. Ответов 7
Метки нет (Все метки)

Написал маленький код по извлечению квадратного корня. Но, видимо, где-то конкретно ошибся. Подскажите, где?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import static java.lang.System.out;
 
public class Coren {
    public static void main (String [] args){
    
        double f = 0;
    double x = 9;
    double z = 0.5;
    double y = x/2;
            for(int i=1; i<x/2;i++){
            f = (double)z*(y+x/y);
            }
            out.print (f);
 
}
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2014, 03:47
Ответы с готовыми решениями:

Написать несколько вариантов целочисленного извлечения квадратного корня из натурального числа
Написать несколько вариантов целочисленного извлечения квадратного корня из натурального числа....

Нужен алгоритм извлечения квадратного корня
Здравствуйте, уважаемые форумчане.Недавно начал изучать C++ и столкнулся с проблемой.Мне...

Алгоритм для извлечения квадратного корня x из вещественного числа y
Составить блок-схему алгоритма для вычисления квадратного корня x из вещественного числа y....

Определить функцию для извлечения квадратного корня из эдементов массива
Это всё одно задание ... -.- 1)Определить функцию для извлечения квадратного корня из элементов...

7
26 / 26 / 6
Регистрация: 09.02.2011
Сообщений: 71
18.08.2014, 12:09 2
а просто Math.sqrt использовать нельзя ?
0
2 / 2 / 5
Регистрация: 31.03.2014
Сообщений: 102
18.08.2014, 12:26  [ТС] 3
Да можно, задание такое было...
0
2878 / 2290 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.08.2014, 12:34 4
Такое чувство, что этот код ты не писал, а просто взял откуда-то и хочешь что бы за тебя написали как должно быть.
Если немного подключить голову и посмотреть на этот код, то сразу видно что в цикле что-то делается и присваивается в переменную f.
При этом счетчик никак не задействован и никакие переменные не меняются.
С таким же успехом можно было написать все в одну строку.
0
1 / 1 / 0
Регистрация: 15.05.2014
Сообщений: 8
18.08.2014, 14:10 5
Ещё перед циклом была объявлена double y = x/2. При этом же в цикле используется i < x/2(как будто это поменяет расчёты) вместо i < y. Результат расчётов одинаковый, но ты используешь больше памяти и нагромождаешь что код, что цикл.
0
2 / 2 / 5
Регистрация: 31.03.2014
Сообщений: 102
18.08.2014, 14:28  [ТС] 6
Ну да, это был код на Си++ и он не работал
Может, после отпуска мозги разжижились, но у меня пока плохо получается

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import static java.lang.System.out;
 
class Coren {
    public static void main (String [] args){
    
// l - Корень из числа X
    int x = 4;
 
//Предполагаем, что корень равен 1;
int l = 1;
 
//Переменная, которую мы будем сравнивать с x - f
      int f = (l*l);
     
//Пока мы не получим равенство f и x, будем инкрементировать l
      while(f<x){
        l++;
        
      }
      out.print(l);
      
      }      
}
Превышено ограничение на время time: 15 memory: 380160 signal:24

Чего я недопонял? И как дробный корень найти? И это же у меня - тупой перебор. Может, есть формулы лучше?
0
26 / 26 / 6
Регистрация: 09.02.2011
Сообщений: 71
18.08.2014, 14:44 7
Лучший ответ Сообщение было отмечено Edward111 как решение

Решение

Edward111, у вас f = l*1, т.е. f равно единице
Вы пишете,
while(f<x)

т.е. пока 1 < 4 - это всегда верно, и вы в цикле увеличиваете l, т.е. у вас бесконечный цикл...
1
2 / 2 / 5
Регистрация: 31.03.2014
Сообщений: 102
18.08.2014, 15:00  [ТС] 8
Спасибо, дошло как до жирафа на 14 сутки...
f = (l*l); нужно ещё и в цикл добавить.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import static java.lang.System.out;
 
class Coren {
    public static void main (String [] args){
    
    int x = 4;
     
      int l = 1;
      int f =(l*l)-x;
     
      while(f<=x){
        f = (l*l);
        l++;
        
      }
      out.print(l);
      
      }
      
}
Успешно time: 0.07 memory: 380160 signal:0
4

Добавлено через 7 минут
Тот же простой пример с декрементом:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import static java.lang.System.out;
 
class Coren {
    public static void main (String [] args){
    
    int x = 4;
     
      int l = x/2;
      int f =(l*l);
     
      while(f>x){
        f = (l*l)-x;
        l--;
        
      }
      out.print(l);
      
      }
      
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2014, 15:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Составить программу извлечения точного квадратного корня из n-разрядного числа (n > 40)
Составить программу извлечения точного квадратного корня из n-разрядного числа (n &gt; 40).

Необходимо составить программу для извлечения точного квадратного корня из n-разрядного числа (n > 40)
Прошу помощи в составлении программы для извлечения точного квадратного корня из n-разрядного числа...

Написать программу, для извлечения квадратного корня из суммы трех чисел, вводимых с клавиатуры
1. Написать программу, для извлечения квадратного корня из суммы трех чисел, вводимых с клавиатуры,...

Алгоритм извлечения квадратного корня на "Феликсе"
Друзья, подскажите, пожалуйста, каким образом можно за приемлемое время и с достаточной точностью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.