Деление десятичных чисел в ЭВМ
Деление представляет многошаговый процесс. Для определения цифр частного необходимо произвести последовательное вычитание делителя из делимого, при этом если очередной остаток положительный или равен нулю, то в соответствующий разряд частного добавляется единица. Деление можно производить с восстановлением и без восстановления остатка.
При делении без восстановления остатка в том случае, когда образуется отрицательный остаток, делитель сдвигают на один десятичный разряд вправо по отношению к остатку и продолжают деление, прибавляя делитель к отрицательному остатку с приписанным справа следующим разрядом делимого. После первого такого прибавления в очередном разряде частного устанавливается цифра 9. На каждом очередном этапе сложения содержимое этого разряда частного уменьшается на единицу. При новом появлении положительного остатка в данном разряде зафиксируется искомая цифра разряда частного. Далее осуществляется переход к определению следующей цифры частного.
Если делимое не делится нацело, то для целей округления можно определить дополнительную цифру частного.
Пример.
Вычислить десятичное частное при по методу с восстановлением остатка.
Для простоты и наглядности операции будем производить вначале деление в десятичной системе счисления.
Сумматор Частное
Делимое 0 5 6
доп. = 920 + 9 2 0
Восстановление 9 7 0 0 (остаток меньше 0)
остатка пр. = 080 + 0 8 0
|
Сдвиг делителя 9 9 2
доп. = 992 0 4 8 01 (остаток больше 0)
+ 9 9 2
0 4 0 02 (остаток больше 0)
+ 9 9 2
0 3 2 03 (остаток больше 0)
+ 9 9 2
0 2 4 04 (остаток больше 0)
+ 9 9 2
0 1 6 05 (остаток больше 0)
+ 9 9 2
0 0 8 06 (остаток больше 0)
+ 9 9 2
0 0 0 07 (остаток равен 0)
Таким образом, Z=X : Y= 7.
Пример.
Теперь рассмотренный пример деления с восстановлением остатка представим в -кодах.
Делимое X=65, делитель Y=8, Z = X : Y.
Ниже приводится схема реализации деления в D-кодах.
Сумматор Частное
Делимое [056] 0000 0101 0110
[080] 1111 1000 0000
1111 1101 0110
коррекция 1010 1010 0000
(976) 1001 0111 0110 < 0 0
Восстановление [080] 0110 1110 0110
0000 0101 1100
коррекция 0000 0000 1010
|
[008] 1111 1111 1000
0000 0100 1110
коррекция 0000 0000 1010
(048) 0000 0100 1000 > 0 01
[008] 1111 1111 1000
0000 0100 0000
коррекция 0000 0000 0000
(040) 0000 0100 0000 > 0 02
[008] 1111 1111 1000
0000 0011 1000
коррекция 0000 0000 1010
(032) 0000 0011 0010 > 0 03
[008] 1111 1111 1000
0000 0010 1010
коррекция 0000 0000 1010
(024) 0000 0010 0100 > 0 04
[008] 1111 1111 1000
0000 0001 1100
коррекция 0000 0000 1010
(016) 0000 0001 0110 > 0 05
[008] 1111 1111 1000
0000 0000 1110
коррекция 0000 0000 1010
(008) 0000 0000 1000 > 0 06
[008] 1111 1111 1000
0000 0000 0000 = 0 07
Таким образом, Z = X : Y = 7.
В заключение рассмотрим пример деления десятичных чисел без восстановления остатка.
Пример.
Вычислить десятичное частное Z = X :Y при X=56, Y=8 по методу без восстановления остатка в десятичной системе счисления.
Сумматор Частное
|
доп. = 920 9 2 0
|
|
Сдвиг делителя 0 0 8
|
0 0 8
|
0 0 8
0 0 0 07 (остаток равен 0)
Таким образом, Z=X : Y= 7.
Вышеприведенный пример деления без восстановления остатка рассмотрим теперь в -кодах. Делимое X=56, делитель Y=8, Z = X : Y.
Сумматор Частное
Делимое [056] 0000 0101 0110
[080] 1111 1000 0000
1111 1101 0110
коррекция 1010 1010 0000
|
[008] 0110 0110 1110
1111 1110 0100
коррекция 1010 0000 1010
(984) 1001 1000 0100 < 0 09
[008] 0110 0110 1110
1111 1111 0010
коррекция 1010 1010 0000
(992) 1001 1001 0010 < 0 08
[008] 0110 0110 1110
0000 0000 0000 = 0 07
Следовательно, Z=X : Y = 7.
АЛГОРИТМИЧЕСКИЕ МОДЕЛИ ВЫПОЛНЕНИЯ
АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ