mpvecadd.c 519 B

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