1: #include <mp.h>
   2: mult(a,b,c) struct mint *a,*b,*c;
   3: {   struct mint x,y,z;
   4:     int sign;
   5:     sign = 1;
   6:     x.val=a->val;
   7:     y.val=b->val;
   8:     z.len=0;
   9:     if(a->len<0)
  10:     {   x.len= -a->len;
  11:         sign= -sign;
  12:     }
  13:     else    x.len=a->len;
  14:     if(b->len<0)
  15:     {   y.len= -b->len;
  16:         sign= -sign;
  17:     }
  18:     else    y.len=b->len;
  19:     if(x.len<y.len) m_mult(&y,&x,&z);
  20:     else m_mult(&x,&y,&z);
  21:     xfree(c);
  22:     if(sign<0) c->len= -z.len;
  23:     else c->len=z.len;
  24:     if(c->len==0) shfree(z.val);
  25:     else c->val=z.val;
  26:     return;
  27: }
  28: #define S2 x=a->val[j];
  29: #define S3 x=x*b->val[i-j];
  30: #define S4 tradd(&carry,&sum,x);
  31: #define S5 c->val[i]=sum.yy.low&077777;
  32: #define S6 sum.xx=sum.xx>>15;
  33: #define S7 sum.yy.high=carry;
  34: m_mult(a,b,c) struct mint *a,*b,*c;
  35: {   long x;
  36:     union {long xx; struct half yy;} sum;
  37:     int carry;
  38:     int i,j;
  39:     c->val=xalloc(a->len+b->len,"m_mult");
  40:     sum.xx=0;
  41:     for(i=0;i<b->len;i++)
  42:     {   carry=0;
  43:         for(j=0;j<i+1;j++)
  44:         {   S2
  45:             S3
  46:             S4
  47:         }
  48:         S5
  49:         S6
  50:         S7
  51:     }
  52:     for(;i<a->len;i++)
  53:     {   carry=0;
  54:         for(j=i-b->len+1;j<i+1;j++)
  55:         {   S2
  56:             S3
  57:             S4
  58:         }
  59:         S5
  60:         S6
  61:         S7
  62:     }
  63:     for(;i<a->len+b->len;i++)
  64:     {   carry=0;
  65:         for(j=i-b->len+1;j<a->len;j++)
  66:         {   S2
  67:             S3
  68:             S4
  69:         }
  70:         S5
  71:         S6
  72:         S7
  73:     }
  74:     if(c->val[i-1]!=0)
  75:         c->len=a->len+b->len;
  76:     else    c->len=a->len+b->len-1;
  77:     return;
  78: }
  79: tradd(a,b,c) long c; int *a; union g {long xx; struct half yy;} *b;
  80: {
  81:     b->xx= b->xx+c;
  82:     if(b->yy.high&0100000)
  83:     {   b->yy.high= b->yy.high&077777;
  84:         *a += 1;
  85:     }
  86:     return;
  87: }

Defined functions

m_mult defined in line 34; used 2 times
tradd defined in line 79; used 1 times
  • in line 30

Defined union's

g defined in line 79; never used

Defined macros

S2 defined in line 28; used 3 times
S3 defined in line 29; used 3 times
S4 defined in line 30; used 3 times
S5 defined in line 31; used 3 times
S6 defined in line 32; used 3 times
S7 defined in line 33; used 3 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 641
Valid CSS Valid XHTML 1.0 Strict