Деление – это процесс обратный умножению. Он фактически сводится к многократному циклическому процессу – вычитанию делителя из делимого и его остатков и соответствующим сдвигам их относительно друг друга либо делителя вправо, либо делимого влево.
В ЭВМ последовательное вычитание делителя заменяется сложением положительного делимого и остатков в модифицированном обратном или в модифицированном дополнительном коде с отрицательным делителем. Остатки также получаются в соответствующем коде.
При делении чисел с фиксированной запятой оба операнда (делимое и делитель ) по модулю должны быть меньше единицы. При этом, чтобы при получении частного не произошло переполнение разрядной сетки, необходимо выполнение дополнительного условия . Поэтому перед началом деления из модуля делимого вычитается модуль делителя. Если разность положительная, то делить нельзя, т.к. , и процесс деления необходимо остановить. Если разность отрицательная , то делить можно. Для этого необходимо восстановить модуль делимого путем прибавления к отрицательной разности модуля делителя и начать процесс деления.
Деление осуществляется следующим образом.
Определяется знак частного путем сложения по модулю два знаков делимого и делителя. Затем производится собственно деление. При этом цифры частного определяются последовательно, разряд за разрядом, начиная со старшего разряда, путем вычитания, например, сдвинутого на один разряд вправо делителя из остатка, полученного от предыдущего вычитания. При определении первой цифры частного за остаток принимается все делимое со знаком плюс. После каждого вычитания делитель сдвигается вправо на один разряд по отношению к делимому и образующимся остаткам. Если остаток от вычитания положительный или равен нулю, то в соответствующий разряд частного заносится 1. Если остаток отрицательный, то соответствующая цифра частного равна 0. Для того, чтобы получить следующую после нуля цифру частного, можно из последнего положительного остатка вычесть делитель, дополнительно сдвинутый на один разряд вправо. Однако в этом случае необходимо выполнить дополнительную операцию сложения для восстановления последнего положительного остатка.
В современных ЭВМ алгоритм деления с восстановлением положительного остатка практически не используется. Если очередной остаток оказался меньше нуля, то к этому отрицательному остатку прибавляется дополнительно сдвинутый на один разряд вправо делитель. При этом образуется очередной остаток. Если он больше или равен нулю, то в соответствующий разряд частного записывается 1, в противном случае - 0 и вычислительный процесс продолжается.
Пример.
Делимое
Делитель .
Требуется найти , т.е. найти и .
Деление возможно, т.к. .
Операции вычитания модуля делителя из модуля делимого и остатков будем выполнять в модифицированном дополнительном коде. Деление производится без восстановления остатка.
Первый шаг. Определение знака частного путем сложения по модулю два знаков делимого и делителя:
.
Второй шаг. Определение первого (старшего) разряда частного путем вычитания из модуля делимого модуля делителя, сдвинутого на один разряд вправо:
.
Третий шаг. Определение второго разряда частного путем вычитания из положительного остатка делителя, сдвинутого еще на один разряд вправо:
.
Четвертый шаг. Определение третьего разряда частного путем вычитания из очередного положительного остатка делителя, сдвинутого еще на один разряд вправо:
.
Пятый шаг. Определение четвертого разряда частного путем сложения отрицательного остатка со сдвинутым еще на один разряд вправо делителем:
.
Шестой шаг. Определение пятого разряда частного путем сложения отрицательного остатка со сдвинутым еще на один разряд вправо делителем:
.
Седьмой шаг. Определение шестого разряда частного аналогично предыдущему:
.
Восьмой шаг. Определение седьмого разряда частного путем вычитания из положительного остатка делителя, сдвинутого в очередной раз на один разряд вправо:
.
Процесс деления может быть продолжен аналогичным образом до получения значения требуемого числа разрядов частного либо до того момента, когда разность не станет равной нулю.
Результат операции деления
.