Blame


1 b3f61791 2004-03-21 devnull #include "os.h"
2 b3f61791 2004-03-21 devnull #include <mp.h>
3 b3f61791 2004-03-21 devnull #include "dat.h"
4 b3f61791 2004-03-21 devnull
5 cbeb0b26 2006-04-01 devnull /* prereq: alen >= blen, sum has at least blen+1 digits */
6 b3f61791 2004-03-21 devnull void
7 b3f61791 2004-03-21 devnull mpvecadd(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *sum)
8 b3f61791 2004-03-21 devnull {
9 b3f61791 2004-03-21 devnull int i, carry;
10 b3f61791 2004-03-21 devnull mpdigit x, y;
11 b3f61791 2004-03-21 devnull
12 b3f61791 2004-03-21 devnull carry = 0;
13 b3f61791 2004-03-21 devnull for(i = 0; i < blen; i++){
14 b3f61791 2004-03-21 devnull x = *a++;
15 b3f61791 2004-03-21 devnull y = *b++;
16 b3f61791 2004-03-21 devnull x += carry;
17 b3f61791 2004-03-21 devnull if(x < carry)
18 b3f61791 2004-03-21 devnull carry = 1;
19 b3f61791 2004-03-21 devnull else
20 b3f61791 2004-03-21 devnull carry = 0;
21 b3f61791 2004-03-21 devnull x += y;
22 b3f61791 2004-03-21 devnull if(x < y)
23 b3f61791 2004-03-21 devnull carry++;
24 b3f61791 2004-03-21 devnull *sum++ = x;
25 b3f61791 2004-03-21 devnull }
26 b3f61791 2004-03-21 devnull for(; i < alen; i++){
27 b3f61791 2004-03-21 devnull x = *a++ + carry;
28 b3f61791 2004-03-21 devnull if(x < carry)
29 b3f61791 2004-03-21 devnull carry = 1;
30 b3f61791 2004-03-21 devnull else
31 b3f61791 2004-03-21 devnull carry = 0;
32 b3f61791 2004-03-21 devnull *sum++ = x;
33 b3f61791 2004-03-21 devnull }
34 b3f61791 2004-03-21 devnull *sum = carry;
35 b3f61791 2004-03-21 devnull }