Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корень квадратный, (целочисленный) 
:(
    Опции темы
Mayk
Дата 7.6.2005, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Кто-нибудь подскажет алгоритм извлечения квадратного корня из целочисленного числа?
Все расчеты надо проводить без использования дробных чисел.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Akina
Дата 7.6.2005, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



как обычно - в столбик... какие проблемы-то?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dvs
Дата 7.6.2005, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Владимир Драпалюк
**


Профиль
Группа: Участник Клуба
Сообщений: 660
Регистрация: 25.8.2003
Где: Воронеж->Москв а

Репутация: нет
Всего: 19



http://algolist.manual.ru/maths/count_fast/intsqrt.php

Думаю, это то, что тебе нужно... smile


--------------------
Любите друг друга!
PM MAIL WWW ICQ   Вверх
Mayk
Дата 7.6.2005, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(Akina @ 7.6.2005, 08:37)
как обычно - в столбик... какие проблемы-то?

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

Цитата(dvs15 @ 7.6.2005, 08:38)
Думаю, это то, что тебе нужно...

Точно! Спасибо! Ньютон воистину рулит! smile





--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
SoWa
Дата 7.6.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Тогда в тему, как его вычислять столбиком?


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
dvs
Дата 7.6.2005, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Владимир Драпалюк
**


Профиль
Группа: Участник Клуба
Сообщений: 660
Регистрация: 25.8.2003
Где: Воронеж->Москв а

Репутация: нет
Всего: 19



Akina и я не знаю, как в столбик его вычислять... Рассказывай, с нас "+" и добавим материал в ФАК. smile


--------------------
Любите друг друга!
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 7.6.2005, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Мне тоже интересно smile
разве что начиная с единицы столбиком числа перемножать и проверять smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
cardinal
Дата 7.6.2005, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Можно так сделать...
Код

   int x = 31366;   // число
   int i = 1;            // его корень 
   int c = 0;           // кол-во операций
   
   while (i*i < x)
   {
      i = (i+2/i)/2+i;
      c++;
   }

   while (i*i > x)
   {
      i--;
      c++;
   }

Это такая мысля на быструю руку просто. Можно сравнить кол-во операций в решении Ньютона с этим решением (значение c).


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Mayk
Дата 8.6.2005, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Увы, медленно. Лучше сравнить время нахождения корня от 1 до некоего max, так как кол-во операций все же не так важно.
max=553600
Ньютоновский:0.11 сек
Кардинальный(?):0.64 сек

Это сообщение отредактировал(а) Mayk - 8.6.2005, 00:08


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 8.6.2005, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Потому что ньютоновский использует производную функцию smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
cardinal
Дата 8.6.2005, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата(Mayk @ 7.6.2005, 22:07)
Увы, медленно.

Ну, Ньютон же есть Ньютон smile
Мой способ пошел из одного рекурсивного способа нахождения корня (если интересно напишу), но в том способе можно использовать дробные числа. А тут пришлось немного его изменить, что привело к тому, что корень после поределенного числа итераций мы автоматом не получаем и приходится в случае перелета "спускаться" вниз
см.
Код

   while (i*i > x)
   {
      i--;
      c++;
   }

Что уже само собой тупо smile Но корень вычисляется smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
esperant0
Дата 8.6.2005, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(sergej @ 8.6.2005, 01:04)
Потому что ньютоновский использует производную функцию smile

Смысл Вашей фразы от меня ускользает.
Что все методы которые используют производные быстро сходятся? Вроде бы нет.



--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Mayk
Дата 8.6.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(cardinal @ 8.6.2005, 02:14)
Мой способ пошел из одного рекурсивного способа нахождения корня (если интересно напишу)

Я весь внимание.

Кстати, я нашел еще один способ нахождения корня. Внимательный читатель заметит здесь идеи бинарного поиска. Получается довольно быстро.
Правда дает округление в любую сторону. Как следствие, график от этой функции не является возрастающем на всех допустимых X.(А при больших X функция вообще не верна - overflow). Особенно радует sq(1) и sq(3). Зато при остальных результат верен с учетом рандомного округления :-)
Код

unsigned sq(int n)
{
    unsigned long sq2;
    register unsigned sq = 0;
    register unsigned l = 0;
    register unsigned u = n / 2;
        
    while (l < u) {
        sq = (l + u) / 2;
        sq2 = sq * sq;
//      printf("n=%d\t sq2=%d\t sq=%d\n",n,sq2,sq);
        if (sq2 == n)
            break;
        if (sq2 < n)
            l = sq + 1;
        else
            u = sq;
    }
    return sq;
}

Результат(для того же max)
Ньютон: 0,09
Мой: 0,10
Кардинальный: 0,63
Я почти что Ньютон(ну и что, что при больших и сверхмалых X алгоритмы Ньютона и Кардинала дают одинаковй результат, быть может мой корень определен для X != {1,3,[262144;+oo) ) smile



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 8.6.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Цитата(esperant0 @ 8.6.2005, 06:46)
Смысл Вашей фразы от меня ускользает.
Что все методы которые используют производные быстро сходятся? Вроде бы нет.

smile
А я не улавливаю смысл Вашей smile Разве я говорил, что все? Но в этом случае это так.

Всё-таки нашёл наглядное обьяснение smile) Это правда обобщённый Ньютон, но всё равно интересно

--Resize_Images_Alt_Text--


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
cardinal
Дата 8.6.2005, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Есть вот такая формула:
[formula]a_{k+1}=\frac{1}{2}(a_{k}+\frac{b}{a_{k}}), k=0,1,2,..., a_{0}=1[/formula]
Она как понимаешь рекурсивная. После определенного кол-ва итераций ты получаешь sqrt(b) с такой то точностью. Чем дольше считаешь, тем точнее будет. То что эта формула сводится к корню от b можно математически доказать...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0928 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.