|
|
1.1 root 1: #include "mprec.h"
2: #include <assert.h>
3:
4:
5: /*
6: * Mneg sets the mint pointed to by "b" to negative 1 times the
7: * mint pointed to by "a". Note that "a" == "b" is permissable.
8: */
9:
10: void
11: mneg(a, b)
12: mint *a, *b;
13: {
14: register char *ap, *rp;
15: register unsigned count;
16: mint res;
17: int mifl;
18:
19: /* allocate result space */
20: mifl = ispos(a);
21: res.len = a->len;
22: if (mifl)
23: ++res.len;
24: res.val = (char *)mpalc(res.len);
25:
26: /* negate and copy */
27: ap = a->val;
28: rp = res.val;
29: count = a->len;
30: while (count-- > 0)
31: *rp++ = NEFL - *ap++;
32: if (mifl)
33: *rp = NEFL;
34: ++*res.val;
35: assert(ap == a->val + a->len);
36: assert(rp == res.val + res.len - (mifl ? 1 : 0));
37: norm(&res);
38:
39: /* replace old value of b with res */
40: mpfree(b->val);
41: *b = res;
42: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.