Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

Алгоритм деления   Найти похожие ветки 

 
Skywalker ©   (2002-06-27 12:13) [0]

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


 
Виктор Щербаков ©   (2002-06-27 12:15) [1]

Столбиком.


 
Digitman ©   (2002-06-27 13:04) [2]

а что ты под "двоичным числом" подразумеваешь ?


 
alxx ©   (2002-06-27 13:09) [3]

101101 | 10
- ------
10 |10110
-----
011
-
10
-----
10
10
-----
01

-----------------------------
101101/10 = 10110 и остаток 1


 
AFROLOV ©   (2002-06-27 13:56) [4]

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


 
Skywalker ©   (2002-06-27 13:59) [5]

2 alxx> это тож сгодится на будущее :)

но меня интересует как это реализовано машинно...
может кто лазил в дебри ассемблера?


 
AFROLOV ©   (2002-06-27 14:02) [6]

Или если числа небольшие, то из битовой формы переводим числа a и b в стандартный тип (например Int64). Делим a/b=с - резултат имеет тип Int64= искомому результату деления. Остаток =a-b*c.


 
Digitman ©   (2002-06-27 14:03) [7]

>Skywalker

Инструкции DIV, IDIV, FDIV и иже с ними.
И что это тебе дает ?


 
Виктор Щербаков ©   (2002-06-27 14:04) [8]


> может кто лазил в дебри ассемблера?

Дык это в камень надо лезть а не в ассемблер.


 
Skywalker ©   (2002-06-27 14:08) [9]

2 Dijitman
это связано с моим предыдущем вопросом о функции ldiv в билдере, которая не смотря ни на какие аргументы выдает 32-битный результат...
вот я и хочу реализовать 64-битный аналог этой функции

IDIV надеюсь работает с расширенными регистрами?


 
AFROLOV ©   (2002-06-27 14:15) [10]

В процерах, помоему, стандартная операция зашитая в железо имеется.


 
Digitman ©   (2002-06-27 14:46) [11]

Причем здесь расширенные регистры ? Они тоже - 32-разрядные ...
Как и макс.размер операндов инструкций DIV, IDIV ...

А целочисленные 64-разр. мат.операции для CPU, не имеющих соотв.встроенную поддержку, всегда эмулируются программно - иного выхода просто нет.

Посему открываешь файл _ll.asm (станд.поставка Делфи) и изучаешь, как это делается, например, в след.процедурах :

__lldiv (signed longlong division)
__lldivo (signed longlong division with overflow control)

все ж под рукой ! готовое причем ! )

и локализуется - заметь, как и все прочие "непонятности" - пошаговой трассировкой (с использованием окна CPU) простейшего кода :

var
a, b, c: Int64;
...
a:= $20000000000;
b:= $2;
c:= a div b;
showmessage(inttohex(c, 16));



 
Skywalker ©   (2002-06-28 12:34) [12]

поскольку у меня идет деление на 2 то я сделал все проще
Quat=Num>>1; //это целая часть
Rem=Num-Quat*2 //это остаток


 
oleg_d   (2002-06-29 11:33) [13]

ну если ты о том делении что я думаю, так это существует множество машинных алгоритмов работы с двоичными числами, которые реализованы внутри самих железяк.
А это тебе надо посмотреть материалы по микропрограммированию.
Но сложноватая штука.



Страницы: 1 вся ветка

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
1-47296
FRecon
2002-06-28 15:33
2002.07.15
EInvalidPointer


1-47599
Администратор
2002-06-28 21:05
2002.07.15
Поиск окон.


1-47400
vixic
2002-07-02 17:21
2002.07.15
Обращение к DLL


4-47882
SLY-YO
2002-05-11 14:22
2002.07.15
Как на Delphi отключить отдельные кнопки.


14-47713
Skier
2002-06-19 12:49
2002.07.15
Про деревья...