![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Да по школьному, но для больших чисел. Собственно все получается, но основная проблема в том, что это медленно. Основная проблема в подборе числа на которое делится фрагмент делимого.
Например нужно нам 125 по-делить 6. Так вот я беру 12 и вычитаю с него 6 пока это возможно. Ладно мелочь вроде, но если взять число 123456789 и поделить его на 6213, то вычитание будет гораздо медленней. Аналогично, чем больше разрядов, тем медленней процесс, потому что вычитание тоже самописное. А это уже потому, что есть вероятность деления на число не умещающееся в стандартный числовой тип Дельфи (собственно для этого и стараюсь). Есть варианты по ускорению процесса? Зы. Про Окулова знаю.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#2 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
![]()
Ну, я например сначала реализовал длинное вычитание, а затем с помощью него делал деление. Скорость была вполне неплохая.
|
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
![]()
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Тут еще вопрос в том, в каком виде числа хранятся. Если это строка с десятиричным числом (1 символ = 1 разряду), то быстрее вряд ли получится. Если же попробовать замутить какую-нибудь 10000-ричную систему счисления, то ,возможно, на том же алгоритме удастся получить лучшие результаты за счет уменьшения числа операций.
Это всё правда теоретически. У самого руки до длинной арифметики так и не дошли ![]() |
![]() |
![]() |
![]() |
#5 |
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
![]()
2ой том Кнута. Он использует алгоритм получения обратной величины для деления и доказывает, что асимптотически сложность алгоритма деления в этом случае не превышает сложности алгоритма умножения. Все будет зависеть от вашей реализации умножения. Можете про это тоже у него прочитать или еще где-нибудь.
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Да числа хранятся так 1 байт - 1 разряд. Насчет 10000 - это тоже не выход - просто оптимально для определенного диапазона.
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#7 |
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
![]() |
![]() |
![]() |
![]() |
#8 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Окулова не читал, не знаю, не приходилось.
Мысль такая (ваш пример "если взять число 123456789 и поделить его на 6213"). Делимое - М разрядов, делитель - N разрядов. Выделяем M-N+1 старших разрядов делителя и делим на цифру старшего разряда делителя (или вычитаем, если вам так дорого именно вычитание). Получаем первое частное. Вернее, почти точную целую часть частного. Попадаем сразу в +-1. То есть, если N младших разрядов делимого (вернее, число, соответствующее им) больше делителя, то +1 к полученному частному, если меньше - то -1. Или +0. Ну, а насчет "ковыряния" с остатком не думал. Лень ![]() Вот как-то примерно вот так... А может, я и не прав... ![]() Последний раз редактировалось mihali4; 29.11.2010 в 17:11. |
![]() |
![]() |
![]() |
#9 |
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
![]()
Кстати да, на алголисте был описан алгоритм деления с помощью угадывания частного с последующей его корректировкой. Сложность вроде ~O(произведение длин чисел). Не самый быстрый, конечно, но всяко быстрее тупого вычитания.
|
![]() |
![]() |
![]() |
#10 | ||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
скрипт выводит в столбик а надо в строчку | zander | PHP | 2 | 04.01.2010 21:53 |
умножить столбик | Betty | Microsoft Office Excel | 10 | 27.07.2009 19:10 |