Для исключения недостатков предыдущего алгоритма был предложен алгоритм деления без восстановления остатков, основанный на простейших преобразованиях приведенных ранее формул (1) и(2).
В I способе деления после упрощения второй строки формулы (1) получим:
(3)
то есть вместо восстановления отрицательного остатка следует удваивать любой остаток сдвигом его на один разряд влево и складывать делитель с остатком, если остаток отрицательный, или вычитать делитель из остатка, если остаток положительный.
Во II способе деления после упрощения второй строки формулы (2) получим:
(4)
то есть в каждом такте цикла деления следует уменьшать вдвое делитель сдвигом его на один разряд вправо и складывать его с остатком, если остаток отрицателен, или вычитать делитель из остатка, если остаток положителен.
Это позволяет сформулировать алгоритм делениябез восстановления остатков для дробных чисел с фиксированной запятой (ФЗ):
1. Определить знак частного сложением по модулю два знаковых разрядов делимого и делителя. Далее использовать модули операндов.
2. Вычесть из делимого делитель путем сложения в обратном или дополнительном кодах.
3. Проанализировать знак остатка после первого вычитания:
- если остаток положительный, произошло ПРС, операцию следует прекратить для смены масштабов операндов;
- если остаток отрицательный, в частное занести «0» и продолжить операцию деления.
4. Выполнить сдвиги частного на один разряд влево и остатка на один разряд влево (I способ) или делителя на один разряд вправо (II способ).
5. Если до сдвига остаток был положительным, вычесть из остатка делитель, если остаток был отрицательным, прибавить к остатку делитель.
6. Если вновь полученный остаток положительный, в очередной разряд частного занести «1», в противном случае – «0».
7. Выполнить пункты 4-6 алгоритма (n+1) раз, причем, последний сдвиг частного не выполнять, так как (n+1) разряд формируется для округления.
8. Выполнить округление результата и присвоить частному знак из первого пункта алгоритма.
Пример 10. Числа А=-12(10) и В=-18(10) представить в форме с ФЗ в прямом коде (МА,В=25) и разделить, используя алгоритм без восстановления остатков,I способ деления и ОК при вычитании.
А=1,01100 – делимое; В=1,10010 – делитель.
1. Знак частного: 1Å1=0.
2. Деление модулей операндов выполняется I способом.
Замечание. Следует обратить внимание на особенности использования ОК при вычитании: при сдвиге отрицательных чиселкак влево, так и вправо освобождающиеся разряды заполняются «1». Кроме того, в соответствии с правилами сложения чисел в ОК при возникновении единицы переноса из знакового разряда её следует прибавлять к младшему разряду числа.