34 lines · 523 B · C
RawDownload
#include "os.h"#include <mp.h>#include "dat.h" // prereq: a >= b, alen >= blen, diff has at least alen digitsvoidmpvecsub(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;	}}