|
|
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.