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

слагаемых:
//
Сложение байтовых чисел в обратном порядке
#
include "BinaryAlign.h" //выравнивание байтовых целых чисел
#
include "BinaryAdd.h"
#
include "BinarySubtract.h"
int BigIntAdd( unsigned char* c,
unsigned char* a, int* pna,
unsigned char* b, int* pnb )
{
int na = *pna; //длина числа a
int nb = *pnb; //длина числа b
int nc = 0;
if( a[na-1] == ’+’ && b[nb-1] == ’+’ ) //a >= 0, b >= 0
return nc = BinaryAdd( c, a, pna, b, pnb ); //c = a + b
if( a[na-1] == ’-’ && b[nb-1] == ’-’ ) //a < 0, b < 0
{
nc = BinaryAdd( c, a, pna, b, pnb ); //c = a + b
c[nc-1] = ’-’; //c = -( a + b )
return nc;
}
if( a[na-1] == ’+’ && b[nb-1] == ’-’ ) //a >= 0, b < 0
return nc = BinarySubtract( c, a, pna, b, pnb );//c = a - b
if( a[na-1] == ’-’ && b[nb-1] == ’+’ ) //a <0 0, b >= 0
return nc = BinarySubtract( c, b, pnb, a, pna );//c = b - a
return nc;
}
Если ввести числа
a
= +9
и
b
=
1005
,
то на мониторе появится
результат сложения
c
=
a
+
b
= (+9) + (
1005)
= 9
1005
=
0996
,
полученный по алгоритму вычитания беззнаковых чисел:
sa = +9
00001001 00101011
sb = -1005
00000101 00000000 00000000 00000101 00101101
00001001 00000000 00000000 00000000 00101011
00000101 00000000 00000000 00000101 00101101
00000110 00001001 00001001 00000000 00101101
Скоростные свойства алгоритма функции сложения
BigIntAdd
( )
определяются набором выполняемых инструкций в теле функции. На
первом этапе выполняются первые три инструкции
int na
=
pna
;
50
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2012