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 /* sum = abs(b1) + abs(b2), i.e., add the magnitudes */
7 b3f61791 2004-03-21 devnull mpmagadd(mpint *b1, mpint *b2, mpint *sum)
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(b2->top > b1->top){
18 b3f61791 2004-03-21 devnull n = b1->top;
19 b3f61791 2004-03-21 devnull m = b2->top;
20 b3f61791 2004-03-21 devnull if(n == 0){
21 b3f61791 2004-03-21 devnull mpassign(mpzero, sum);
24 b3f61791 2004-03-21 devnull if(m == 0){
25 b3f61791 2004-03-21 devnull mpassign(b1, sum);
28 b3f61791 2004-03-21 devnull mpbits(sum, (n+1)*Dbits);
29 b3f61791 2004-03-21 devnull sum->top = n+1;
31 b3f61791 2004-03-21 devnull mpvecadd(b1->p, n, b2->p, m, sum->p);
32 b3f61791 2004-03-21 devnull sum->sign = 1;
34 b3f61791 2004-03-21 devnull mpnorm(sum);
37 cbeb0b26 2006-04-01 devnull /* sum = b1 + b2 */
39 b3f61791 2004-03-21 devnull mpadd(mpint *b1, mpint *b2, mpint *sum)
41 b3f61791 2004-03-21 devnull int sign;
43 b3f61791 2004-03-21 devnull if(b1->sign != b2->sign){
44 b3f61791 2004-03-21 devnull if(b1->sign < 0)
45 b3f61791 2004-03-21 devnull mpmagsub(b2, b1, sum);
47 b3f61791 2004-03-21 devnull mpmagsub(b1, b2, sum);
49 b3f61791 2004-03-21 devnull sign = b1->sign;
50 b3f61791 2004-03-21 devnull mpmagadd(b1, b2, sum);
51 b3f61791 2004-03-21 devnull if(sum->top != 0)
52 b3f61791 2004-03-21 devnull sum->sign = sign;