12345678910111213141516171819202122232425262728293031323334 |
- #include "os.h"
- #include <mp.h>
- #include "dat.h"
- // prereq: a >= b, alen >= blen, diff has at least alen digits
- void
- mpvecsub(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *diff)
- {
- int i, borrow;
- mpdigit x, y;
- borrow = 0;
- for(i = 0; i < blen; i++){
- x = *a++;
- y = *b++;
- y += borrow;
- if(y < borrow)
- borrow = 1;
- else
- borrow = 0;
- if(x < y)
- borrow++;
- *diff++ = x - y;
- }
- for(; i < alen; i++){
- x = *a++;
- y = x - borrow;
- if(y > x)
- borrow = 1;
- else
- borrow = 0;
- *diff++ = y;
- }
- }
|