|
|
1.1 root 1: static char *sccsid = "@(#)subbig.c 34.1 10/3/80";
2:
3: #include "global.h"
4:
5: lispval
6: subbig(pos,neg)
7: lispval pos, neg;
8: {
9: register lispval work;
10: int *sp(); lispval adbig();
11: register int *mysp = sp() - 2;
12: register int *ersatz = mysp;
13: snpand(3);
14:
15: for(work = neg; work!=0; work = work->s.CDR) {
16: stack(-work->i, (mysp -= 2));
17: }
18: mysp[3] = 0;
19: return(adbig(pos,ersatz));
20: }
21: /*
22: * subbig -- subtract one bignum from another.
23: *
24: * What this does is it negates each coefficient of a copy of the bignum
25: * which is just pushed on the stack for convenience. This may give rise
26: * to a bignum which is not in canonical form, but is nonetheless a repre
27: * sentation of a bignum. Addbig then adds it to a bignum, and produces
28: * a result in canonical form.
29: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.