Page 9 - М.Ю. Барышникова, А.Ф. Деон, А.В. Силантьева - СКОРОСТНЫЕ СВОЙСТВА АЛГОРИТМОВ СЛОЖЕНИЯ И ВЫЧИТАНИЯ ЦЕЛЫХ ЧИСЕЛ ПРОИЗВОЛЬНОГО РАЗМЕРА

int nb = *pnb; //длина массива b
int m = BinaryAlign2( a, na, b, nb ); //выравнивание чисел
*
pna = m; //число байт со знаком в числе a
*
pnb = m; //число байт со знаком в числе b
unsigned char tranzit = 0; //занимаемая единица
int m1=m-1;
for( int i = 0; i < m1; i++ ) //цикл вычитания байт
{
signed char d = a[i] - tranzit - b[i];
if( d < 0 ) { d = 10 + d; tranzit = 1; }
else tranzit = 0;
c[i] = d;
}
if( tranzit == 0 ) //положительный результат
{
c[m1] = 43; //знак ’+’
return m;
}
c[0] = 10 - c[0]; //формирование отрицательного результата
for( int i = 1; i < m1; i ++ ) c[i] = 9 - c[i];
c[m1] = 45; //знак ’-’
return m;
}
Если в программе ввести числа
a
= +9
и
b
= +1005
,
то на мо-
ниторе будет отображен результат вычитания
c
=
a
b
= (+9)
(
+1005) =
996
:
sa = +9
00001001 00101011
sb = +1005
00000101 00000000 00000000 00000101 00101011
00001001 00000000 00000000 00000000 00101011
00000101 00000000 00000000 00000101 00101011
00000110 00001001 00001001 00000000 00101101
Скоростные свойства функции
BinsrySubtract
( )
определяются ко-
личеством операций над целыми числами внутри тела функции. На
первом этапе выполняются инструкции
int na
=
pna
;
int nb
=
pnb
;
m
=
BinaryAlign
2(
a, na, b, nb
)
;
pna
=
m
;
pnb
=
m
;
unsigned char
tranzit = 0
.
Общее количество операций на данном этапе можно оце-
нить как
W
BinarySubtract
1
min
= 2 + 2 +
A
min
+ 2 + 2 = 4 + 5 + 4 = 13;
W
BinarySubtract
1
max
= 2 + 2 +
A
max
+ 2 + 2 = 4 + 1 + 5
n
+ 4 = 9 + 5
n.
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2012
47