Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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