1 b3f61791 2004-03-21 devnull #include "os.h"
2 b3f61791 2004-03-21 devnull #include <mp.h>
3 b3f61791 2004-03-21 devnull #include "dat.h"
5 cbeb0b26 2006-04-01 devnull /* diff = abs(b1) - abs(b2), i.e., subtract the magnitudes */
7 b3f61791 2004-03-21 devnull mpmagsub(mpint *b1, mpint *b2, mpint *diff)
9 b3f61791 2004-03-21 devnull int n, m, sign;
10 b3f61791 2004-03-21 devnull mpint *t;
12 cbeb0b26 2006-04-01 devnull /* get the sizes right */
13 b3f61791 2004-03-21 devnull if(mpmagcmp(b1, b2) < 0){
14 b3f61791 2004-03-21 devnull sign = -1;
19 b3f61791 2004-03-21 devnull sign = 1;
20 b3f61791 2004-03-21 devnull n = b1->top;
21 b3f61791 2004-03-21 devnull m = b2->top;
22 b3f61791 2004-03-21 devnull if(m == 0){
23 b3f61791 2004-03-21 devnull mpassign(b1, diff);
24 b3f61791 2004-03-21 devnull diff->sign = sign;
27 b3f61791 2004-03-21 devnull mpbits(diff, n*Dbits);
29 b3f61791 2004-03-21 devnull mpvecsub(b1->p, n, b2->p, m, diff->p);
30 b3f61791 2004-03-21 devnull diff->sign = sign;
31 b3f61791 2004-03-21 devnull diff->top = n;
32 b3f61791 2004-03-21 devnull mpnorm(diff);
35 cbeb0b26 2006-04-01 devnull /* diff = b1 - b2 */
37 b3f61791 2004-03-21 devnull mpsub(mpint *b1, mpint *b2, mpint *diff)
39 b3f61791 2004-03-21 devnull int sign;
41 b3f61791 2004-03-21 devnull if(b1->sign != b2->sign){
42 b3f61791 2004-03-21 devnull sign = b1->sign;
43 b3f61791 2004-03-21 devnull mpmagadd(b1, b2, diff);
44 b3f61791 2004-03-21 devnull diff->sign = sign;
48 b3f61791 2004-03-21 devnull sign = b1->sign;
49 b3f61791 2004-03-21 devnull mpmagsub(b1, b2, diff);
50 b3f61791 2004-03-21 devnull if(diff->top != 0)
51 b3f61791 2004-03-21 devnull diff->sign *= sign;