Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Корень квадратный |
Автор: Mayk 7.6.2005, 08:10 |
Кто-нибудь подскажет алгоритм извлечения квадратного корня из целочисленного числа? Все расчеты надо проводить без использования дробных чисел. |
Автор: Akina 7.6.2005, 08:37 |
как обычно - в столбик... какие проблемы-то? |
Автор: dvs 7.6.2005, 08:38 |
http://algolist.manual.ru/maths/count_fast/intsqrt.php Думаю, это то, что тебе нужно... ![]() |
Автор: Mayk 7.6.2005, 15:54 | ||||
Ну, например, я не знаю как вычислять корень квадратный в столбик.
Точно! Спасибо! Ньютон воистину рулит! ![]() |
Автор: SoWa 7.6.2005, 19:21 |
Тогда в тему, как его вычислять столбиком? |
Автор: dvs 7.6.2005, 19:44 |
Akina и я не знаю, как в столбик его вычислять... Рассказывай, с нас "+" и добавим материал в ФАК. ![]() |
Автор: sergejzr 7.6.2005, 20:15 |
Мне тоже интересно ![]() разве что начиная с единицы столбиком числа перемножать и проверять ![]() |
Автор: cardinal 7.6.2005, 21:03 | ||
Можно так сделать...
Это такая мысля на быструю руку просто. Можно сравнить кол-во операций в решении Ньютона с этим решением (значение c). |
Автор: Mayk 8.6.2005, 00:07 |
Увы, медленно. Лучше сравнить время нахождения корня от 1 до некоего max, так как кол-во операций все же не так важно. max=553600 Ньютоновский:0.11 сек Кардинальный(?):0.64 сек |
Автор: sergejzr 8.6.2005, 01:04 |
Потому что ньютоновский использует производную функцию ![]() |
Автор: cardinal 8.6.2005, 02:14 | ||||
Ну, Ньютон же есть Ньютон ![]() Мой способ пошел из одного рекурсивного способа нахождения корня (если интересно напишу), но в том способе можно использовать дробные числа. А тут пришлось немного его изменить, что привело к тому, что корень после поределенного числа итераций мы автоматом не получаем и приходится в случае перелета "спускаться" вниз см.
Что уже само собой тупо ![]() ![]() |
Автор: esperant0 8.6.2005, 07:46 | ||
Смысл Вашей фразы от меня ускользает. Что все методы которые используют производные быстро сходятся? Вроде бы нет. |
Автор: Mayk 8.6.2005, 17:59 | ||||
Я весь внимание. Кстати, я нашел еще один способ нахождения корня. Внимательный читатель заметит здесь идеи бинарного поиска. Получается довольно быстро. Правда дает округление в любую сторону. Как следствие, график от этой функции не является возрастающем на всех допустимых X.(А при больших X функция вообще не верна - overflow). Особенно радует sq(1) и sq(3). Зато при остальных результат верен с учетом рандомного округления :-)
Результат(для того же max) Ньютон: 0,09 Мой: 0,10 Кардинальный: 0,63 Я почти что Ньютон(ну и что, что при больших и сверхмалых X алгоритмы Ньютона и Кардинала дают одинаковй результат, быть может мой корень определен для X != {1,3,[262144;+oo) ) ![]() |
Автор: sergejzr 8.6.2005, 18:18 | ||
![]() А я не улавливаю смысл Вашей ![]() Всё-таки нашёл наглядное обьяснение ![]() http://upload.wikimedia.org/wikipedia/de/e/e0/NewtonIteration_Ani.gif |
Автор: cardinal 8.6.2005, 20:19 |
Есть вот такая формула: [formula]a_{k+1}=\frac{1}{2}(a_{k}+\frac{b}{a_{k}}), k=0,1,2,..., a_{0}=1[/formula] Она как понимаешь рекурсивная. После определенного кол-ва итераций ты получаешь sqrt(b) с такой то точностью. Чем дольше считаешь, тем точнее будет. То что эта формула сводится к корню от b можно математически доказать... |
Автор: cardinal 8.6.2005, 20:20 |
Блин, а формулы еще не отображаются ![]() |
Автор: esperant0 8.6.2005, 20:50 | ||
Проверил на числах порядка 10 в степени 40 Ваш метод 15 секунд Метод Ньютона 3 секунды. И в этом ничего удивительного так как метод Ньютона Рафсона имеет сходимость второго порялка, а методы аля Биссекция только первого. |
Автор: III.nfo 9.6.2005, 20:06 |
Судя по всему, от Акина метода нет, так что: http://kvant.mirror0.mccme.ru/1987/03/staryj_algoritm.htm |
Автор: dvs 9.6.2005, 23:20 |
III.nfo, обещанный плюс тебе... ![]() |
Автор: cardinal 10.6.2005, 00:11 |
Я так и не понял: неужели никого так не потрясла та рекурсивная формула как меня? ![]() |
Автор: esperant0 10.6.2005, 01:07 | ||
Последняя приведенная Вами формула, является ф-й полученной при использовании метода Ньютона Рафсона ака метод касательных. Метод потрясает. а формула его частный случай. |
Автор: ChofCh 17.6.2005, 02:39 | ||
Что-то алгоритм нахождения корня в столбик так и не выложили... Исправим:
|
Автор: cardinal 17.6.2005, 02:48 |
Помоему III.nfo дал нужную ссылку... |
Автор: Маг 4.7.2006, 13:40 | ||
А ни кто не может перевести Сишный код в Алгоритмический или хотябы Делфи!!! ![]() ПЛЗ!!! А то Си чуть-чуть не знаю..... ![]() |