plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }