ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
5
В теле инструкции условия находятся инструкции
c
[
j+1
]
+ =
= c
[
j
]
/ 10;
c
[
j
]
= c
[
j
]
% 10
, на выполнение которых затрачиваются де-
вять операций. На третьем этапе будет выполнено максимальное
число итераций, если перенос выполняется для каждого разряда в
числе результата:
(
)
1 1
3 max
0
1
3 2 9 1 14 1.
nb
j
W
nb
−
=
= + + + = +
∑
На последнем, четвертом этапе в минимальном случае, когда от-
сутствуют переносы, будут выполнены две операции в инструкции
if
(
c
[
nb1
]
== 0
)
return nb1
:
4 min
2.
W
=
Если на старшей цифре результата происходит перенос, то вы-
полняется одна операция в инструкции
return nb1 + 1
. Вместе с
предыдущим условием
if
(
c
[
nb1
]
== 0
) получаем
4 max
2 1 3.
W
= + =
Подводя итог, получаем минимальную и максимальную оценки
числа операций при выполнении функции
SingleMultiply
( ):
min
1
2
3 min
4 min
SingleMultiply
W
W W W W
= + + + =
2 1 7 1 1 5 1 2
nb
nb
= + + + + + =
6 12 1;
nb
= +
max
1
2
3 max
4 max
SingleMultiply
W
W W W W
= + + +
=
2 1 7 1 1 14 1 3
nb
nb
= + + + + + =
7 21 1.
nb
= +
Выровненное байтовое вычитание.
При подборе соответству-
ющего дихотомического множителя необходимо проводить вычита-
ние, чтобы убедиться в том, что остаток от произведения предлагае-
мого дихотомического множителя на заданный множитель не
превосходит значение заданного множителя. Такое вычитание вы-
полняет функция
SingleSubtract
( ), в которой параметр
unsigned
char*s
является указателем на массив побайтового результата вычи-
тания, параметр
unsigned char* u
задает массив уменьшаемого, пара-
метр
unsigned char* v
определяет массив вычитаемого, параметр
int
nv
определяет количество байтов в выровненных по длине массивах
u
и
v
без учета знаков чисел:
int inline SingleSubtract( unsigned char* s, unsigned char* u,
unsigned char* v, int nv )
{ unsigned char tranzit = 0; // для занимаемой единицы