| #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; | |
| } | |
| } |