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