V10/cmd/lfactor/madd.c

Compare this file to the similar file:
Show the results in this format:

#include "mp.h"

mint
madd(a,b)
mint a,b;
{
	mint x;
	int i;

	x.low = a.low + b.low;
	x.high = a.high + b.high;
	if(x.low > e16){
		x.low -= e16;
		x.high += 1.;
	}else
	if(x.low < -e16){
		x.low += e16;
		x.high -= 1.;
	}
	if(x.high >= e16) ofl("madd");
	if((x.high>0) && (x.low<0)){
		x.high -= 1.;
		x.low += e16;
	}
	if((x.high<0)  && (x.low>0)){
		x.high += 1.;
		x.low -= e16;
	}
	return(x);
}

mint
msub(a,b)
mint a,b;
{
	b.high = -b.high;
	b.low = -b.low;
	return(madd(a,b));
}

int
mcmp(a,b)
mint a, b;
{
	if(a.high > b.high)
		return(1);
	if(a.high < b.high)
		return(-1);
	if(a.low > b.low)
		return(1);
	if(a.low < b.low)
		return(-1);
	return(0);
}


mint
itom(i)
int i;
{
	mint x;

	x.high = 0.;
	x.low = i;
	return(x);
}
mint
mchs(a)
mint a;
{
	a.high = -a.high;
	a.low = -a.low;
	return(a);
}