
- •1.4. Алфавитное представление и преобразование информации
- •Глава 2
- •2.1. Непозиционные системы счисления
- •2.2. Позиционные системы счисления
- •Неоднородные позиционные системы счисления
- •Однородные позиционные системы счисления
- •2.3. Кодированные позиционные системы счисления
- •2.4. Системы счисления специального назначения
- •2.6. Символические системы счисления
- •2.7. Перевод чисел из одной системы счисления в другую
- •Перевод целых чисел из одной позиционной системы счисления в другую
- •2.8. Выбор системы счисления для применения эвм
- •2.9. Двоичная система счисления
- •2.10. Представление двоичных чисел в эвм
- •2.11. Точность представления чисел в эвм
- •Глава 3
- •3.1. Основные понятия
- •3.2. Операция алгебраического сложения в эвм
- •3.3. Операция сдвига
- •3.4. Сложение чисел в машинах с плавающей запятой
- •8.5. Округление чисел в эвм
- •3.6. Точность выполнения операций в машине с плавающей запятой
- •3.7. Вычисления с двойной точностью
- •Глава 4
- •4.1. Общие сведения об операции умножения
- •4.2. Умножение, выполняемое методом накопления частичных произведений
- •4.3. Сравнение схем умножения методом накопления
- •4.4. Методы ускорения операции умножения
- •4.5. Умножение чисел, заданных в дополнительном коде
- •4.6. Умножение чисел в машинах с плавающей запятой
- •4.7. Особенности выполнения операции умножения в современных эвм
- •4.8. Деление чисел с восстановлением остатков
- •4. 9. Деление без восстановления остатков
- •4.10. Машинные схемы деления
- •4.11. Деление чисел в дополнительном коде
- •4.13. Деление чисел в машинах с плавающей запятой
- •Глава 6
- •6.1. Сложение в прямых д-кодах
- •6.2. Сложение чисел в инверсных д-кодах
- •Для кода д2
- •6.3. Сдвиг д-кодов
- •6.4. Умножение чисел в д-кодах
- •6.5. Деление чисел в д-кодах
- •6.6. Перевод чисел в д-кодах
6.5. Деление чисел в д-кодах
Деление десятичных чисел обычно выполняется в прямых Д- кодах. Знак частного определяется так же, как и при двоичном делении, поэтому в дальнейшем рассмотрим деление положительных десятичных дробей. Из двух возможных способов деления двоичных чисел для деления десятичных чисел целесообразно применять только способ при неподвижном делителе и сдвиге остатков и частного влево. При двоичном делении в каждом такте получалась очередная цифра частного, которая принимала одно из двух возможных значений (0 или 1). Для определения этой цифры делитель вычитался из делимого на нулевом шаге и сдвинутого влево на один разряд очередного остатка на последующих шагах. При десятичном делении количество вычитаний делителя из сдвинутого очередного остатка, как правило, больше 1, так как разряды частного могут принимать значения от 0 до 9. Так же как и при умножении, на сумматоре слева от запятой должно быть пять двоичных разрядов: самый левый — знаковый, где фиксируется знак остатка, и еще одна тетрада, в которую может сдвигаться старшая цифра текущего остатка при его сдвиге влево. Справа от запитой в сумматоре должна быть (п + 1) тетрада, младшая из которых используется только для округления частного. В регистре делителя справа от запятой должно быть п тетрад. Регистр частного должен быть с левым сдвигом и иметь (п + 1) тетраду. Причем младшая тетрада должна представлять собой реверсивный счетчик, в котором формируется очередная десятичная цифра частного при выполнении очередного шага деления. Всех циклов деления должно быть п + 2, так как в первом цикле получается цифра слева от запятой, а справа от запятой необходимо сформировать п +1 цифру с учетом разряда округления. Если на первом шаге цифра частного не равна 0, то частое вышло за пределы разрядной сетки, т. е. операция не корректна. При выполнении каждого шага деления к счетчику тактов прибавляется 1. а операция завершается после выполнения (п + 2) циклов.
В исходном состоянии делимое находится в сумматоре, делитель — в регистре делителя, а регистр частного установлен в состояние 0. Деление начинается с вычитания делителя из делимого на нулевом шаге и из сдвинутых остатков— на последующих шагах. Вычитание на каждом шаге заменяется сложением в дополнительном Д- коде и производится до тех пор, пока не получится отрицательный остаток. При этом каждый раз при получении положительного остатка добавляется единица в специальный счетчик, где накапливается очередная цифра частного. Затем осуществляется сдвиг остатка на четыре двоичных разряда к прибавление к нему делителя до тех пор, пока не получится положительный остаток. Количество сложений (без последнего) является дополнением соответствующей цифры частного до 9, что заносится в счетчик очередной цифры частного.
Таким образом, процесс деления состоит из ряда последовательно чередующихся циклов сложения и вычитания, которые выполняются на сумматоре, работающем по правилам алгебраического сложения в соответствующем Д- коде, и завершаются сдвигами частного и остатков влево на одну тетраду. При этом в тетраду сумматора слева от запятой сдвигается код из тетрады справа от запятой, а содержимое знакового разряда не меняется.
Пример. Разделить число А = 0,154675 на число В = 0,55. Так как А < В, на нулевом шаге остаток должен получиться отрицательным, т. е. операция корректна. Далее рассмотрим только цифровую часть чисел
1-й шаг _ 154675 СЧ: = 0 y1 = 0
55000
_ 99 675 СЧ: =0+1 y1 = 1
55 000
_ 44 675 СЧ: =1+1 y1 = 2
55 000
- 89 675 y1 = 2
Остаток < 0. Сдвиг частного влево и делителя вправо (или остатка влево).
2-й шаг 89 675 СЧ : = 0 y2 = 9
+ 5500
95175
+ 5500 СЧ : =9-1 y2 = 8
00675 y2 = 8
Остаток > 0. Сдвиг частного влево и делителя вправо на 4 двоичных разряда,
3-й шаг _ 00675 СЧ: = 0 y3 = 0
550
_ 00125 СЧ: =0+1 y3 = 1
550
99575 y3 = 1
Остаток <0. Сдвиг частного влево и делителя вправо на 4 двоичных разряда. И так далее.
Таким образом, У = А/В = 0,281.
По другому способу при делении чисел, заданных в Д- кодах, результат получается в двоичной системе счисления.
Допустим, при делении А на В получено частное в виде Y = 0,y1y2 ... yп.
Тогда А = В (y1 2 -1 + y2 2 -2 + ... + yn 2 –n) + Rn, где Rn — остаток от деления.
Положим Rn = 0 и у1 = 1, y2 = y3 = ... = 0. Тогда остаток на первом шаге
R1 = А — 2 -1 В.
Если R1> 0, то у1 = 1; если R1 < 0, то у1 = 0. В последующем случае восстанавливается предыдущий положительный остаток. Затем примем, что y2 = 1, а остальные yi = 0 и т. д. Остаток на
n
любом шаге составит Ri = А — В Σ yi 2 -i. Следует учесть, что при сдвиге чисел, представленных в
i=1
Д-коде, необходимо вводить поправки. Поэтому для хранения делителя желательно иметь самостоятельный сумматор, в котором при передаче единицы из одной тетрады в другую автоматически вносится поправка.
Пример. Заданы А = 0,2425; В = 0,5200. Найти Y = А/В.
Делитель В на i-м шаге |
Сумматор (СМ)
|
Примечание
|
Цифры
|
0,5200 0,2600
0,1300
0,0650
0,0325
0,0162
0,0081 |
0,2425 - 0,2600 9,9825 + 0,2600 0,2425 - 0,1300 0,1125 - 0,0650 0,0475 - 0,0325 0,0150 0,0150 - 0,0162 9,9938 + 0,0162 0,0150 - 0,0081 0,0069 и т.д. |
В 2 –1; СМ= [CM] – B 2 –1
R<0 Восстановление R1 т.е. R1 + B 2 –2 В 2 –2; СМ= [CM] – B 2 –2 R2 >0 В 2 –3; R2 – B 2 –3 R3 >0 В 2 –4; R3 – B 2 –4 R4 >0 В 2 –5; R4 – B 2 –5 R5 <0
Восстановление R5 В 2 –6; R4 – B 2 –6 R6 >0
|
у1 = 0
у2 = 0
у3 = 0
у4 = 0
у5 = 0
у16 = 0 |
Таким образам, Y = 0,011101.