Деление
Реализация операции деления в ЭВМ в двоичной системе счисления выполняется проще, чем в десятичной. Это объясняется тем, что при определении каждой цифры частного нужно сделать только одну пробу.
Если числа X и Y заданы в прямом коде, и они представлены с фиксированной запятой, то для выполнения деления используются два основных алгоритма:
- со сдвигом и автоматическим восстановлением остатка ;
- со сдвигом делителя и автоматическим восстановлением остатка.
Пусть: [X]пк = sign X. x1x2..xn
[Y]пк = sign Y. y1y2..yn
[Z]пк = [X]пк/[Y]пк = sign Z. z1z2..zn
X и Y должны быть такими, чтобы:
|Z| < 1 (то есть фиксированная запятая )
Деление в прямом коде со сдвигом и автоматическим восстановлением остатка
- \[ sign\ Z = sign\ X \oplus sign\ Y \]
- \[ |X| - |Y| = \alpha _{0} \]
-
Если \[ \alpha _{0} \ge 0 \] , то z0 = 1 и \[ 2\alpha _{0} - |Y| = \alpha _{1} \] ( z0 – целая часть результата).
Если \[ \alpha _{0} < 0 \] , то z0 = 0 и \[ 2\alpha _{0} + |Y| = \alpha _{1} \]
и т. д.
Пример:
\[ \lbrack X \rbrack_{пк} = 0.100\\ \lbrack Y \rbrack_{пк} = 1.110\\ sign\ Z = 1 \oplus 0 = 1\\ \lbrack-|Y| \rbrack_{дк} = 1.010 \]+0.100 = [|X|]дк
1.010 = [-|Y|]дк
\[ 1.110 = \alpha _{0} = [|X|]_{дк} + [-|Y|]_{дк} < 0, z_{0} = 0 \]
\[ _{+}1.100 = 2\alpha _{0} (сдвиг\ в\ ДК\ отрицательного\ числа) \]
0.110 = [|Y|]дк
\[ 0.010 = \alpha _{1} = 2\alpha _{0} + [|Y|]_{дк} > 0,\ z_{1} = 1 \]
\[ _{+}0.100 = 2\alpha _{1} \]
1.010 = [-|Y|]дк
\[ 1.110 = \alpha _{2} = 2\alpha _{1} + [-|Y|]_{дк} < 0, z_{2} = 0 \]
\[ _{+}1.100 = 2\alpha _{2} (сдвиг\ в\ ДК\ отрицательного\ числа) \]
0.110 = [|Y|]дк
\[ 0.010 = \alpha _{3} = 2\alpha _{2} + [|Y|]_{дк} > 0, z_{3} = 1 \]
Ответ: [Z]пк = 1.101
Деление в прямом коде со сдвигом делителя и автоматическим восстановлением остатка
- \[ sign\ Z = sign\ X \oplus sign\ Y \]
- \[ |X| - |Y| = \alpha _{0} \]
-
Если \[ \alpha _{0} \ge 0 \] , то z0 = 1.
Если \[ \alpha _{0} < 0 \] , то z0 = 0.
Разрядная сетка (n + d) разрядов, где d = log2n
Пример:
1) [X]пк = 1.1001 2) [Y]пк = 1.1011 n = 4, d = 2
Ответ: [Z]пк = 0.1100