Показать сообщение отдельно
Старый 09.08.2010, 13:26   #1
Tronix
Знающий
 
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений
(для 331 пользователей)
Деление 8bit на 8bit

Привет, в математике полный лох, поэтому спрошу здесь -
нужен алгоритм целочисленного деления одной восьмибитной переменной на другую восьмибитную, используя только SHR/SHL и вычитание/сложение.
Чтото типа такого:
Var
      
a,b,b1,q,byte;
begin
      a 
:= 100;
      
:= 15;
      
b1 := b;
      while 
b1 <= do 
            
begin
                  b1 
:= b1 shl 1;
            
end;
      {
b1 ab1 * (некоторая степень 2)}
      
q:=0
      
r:=a;
      {
инвариантqчастное и остаток при делении a на b1,
      
b1 * (некоторая степень 2)}
      while 
b1 <> do
            
begin
                  b1 
:= b1 shr 1 := q shl 1;
                  { 
b1 r<= rb1}
                  if 
>= b1 then 
                        begin
                              r 
:= b1;
                              
:= 1;
                        
end;
            
end;
      
write(q,'   ',r);
      
readln;
end
Но как видно, тут получаем переполнение при операции shl если делимое больше 127 и, соответственно, уход в зацикливание. Нужно как-то извратится, и не получать переполнение. Чтобы можно было поделить скажем 250 на 230 и тд.

PS: Для любителей деления в столбик и им сочувствующих в танках - использовать операцию деления и умножения НЕЛЬЗЯ.

Последний раз редактировалось Tronix, 09.08.2010 в 15:02.
(Offline)
 
Ответить с цитированием