Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2012, 10:42   #11
SlashMan
Пользователь
 
Регистрация: 14.07.2009
Сообщений: 30
Радость

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Всё от конкретной реализации зависит. Если на чистом ассемблере делать, то там ничего сложного я не вижу...
Спасибо вам огромное, скорее всего вы предложили наилучший для меня алгоритм

P.S. а есть ли аналогичный способ если числа представлены в десятичной системе?

Последний раз редактировалось SlashMan; 17.04.2012 в 11:17.
SlashMan вне форума Ответить с цитированием
Старый 17.04.2012, 10:46   #12
SlashMan
Пользователь
 
Регистрация: 14.07.2009
Сообщений: 30
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
как я понимаю, длина чисел должна быть произвольной?
на мой взгляд, самым быстрым решением будет вычитание с побитным сдвигом. т.е.

если длина делимого(A) = m бит, а длина делителя (B) = n бит

1. создаём проверочный массив C = n+1 бит
2. копируем в младшие n бит массива C n старших бит из A

3. сравниваем B и C
4. если C > B, тогда C = C - B, а частное D = (D shl 1) + 1
5. иначе D = D shl 1
6. С = С shl 1 + следующий разряд из A
7. если в А разрядов больше не оставалось, тогда:

D = частное
C = остаток
Только у меня к вам вопросик: почему длину массива С мы принимаем n+1 бит? Ведь тогда он может оказаться больше делителя, а остаток не может быть больше делителя
SlashMan вне форума Ответить с цитированием
Старый 17.04.2012, 11:03   #13
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

рассмотрю на простом примере:
пусть в C содержится 1000b
а делитель B: 1001b
получить положительный результат при вычитании у нас не получится т.к. B>C, поэтому нам нужно заполнить С ещё одним битом (пусть будет "1"). Если разрядность одинакова, то: Cn = 0001b, хотя нам нужно значение C = 10001b для вычитания. Именно поэтому С должно быть как-минимум на один бит больше B.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
остаток от деления madman_34 Общие вопросы C/C++ 1 17.12.2011 00:37
Остаток от деления Memfis_nya Помощь студентам 23 26.09.2010 14:58
Получить остаток от деления Cpluser Общие вопросы C/C++ 18 26.02.2009 18:05
остаток от деления % Division Общие вопросы C/C++ 5 25.12.2008 14:08