URI:
       tmpsub.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tmpsub.c (801B)
       ---
            1 #include "os.h"
            2 #include <mp.h>
            3 #include "dat.h"
            4 
            5 /* diff = abs(b1) - abs(b2), i.e., subtract the magnitudes */
            6 void
            7 mpmagsub(mpint *b1, mpint *b2, mpint *diff)
            8 {
            9         int n, m, sign;
           10         mpint *t;
           11 
           12         /* get the sizes right */
           13         if(mpmagcmp(b1, b2) < 0){
           14                 sign = -1;
           15                 t = b1;
           16                 b1 = b2;
           17                 b2 = t;
           18         } else
           19                 sign = 1;
           20         n = b1->top;
           21         m = b2->top;
           22         if(m == 0){
           23                 mpassign(b1, diff);
           24                 diff->sign = sign;
           25                 return;
           26         }
           27         mpbits(diff, n*Dbits);
           28 
           29         mpvecsub(b1->p, n, b2->p, m, diff->p);
           30         diff->sign = sign;
           31         diff->top = n;
           32         mpnorm(diff);
           33 }
           34 
           35 /* diff = b1 - b2 */
           36 void
           37 mpsub(mpint *b1, mpint *b2, mpint *diff)
           38 {
           39         int sign;
           40 
           41         if(b1->sign != b2->sign){
           42                 sign = b1->sign;
           43                 mpmagadd(b1, b2, diff);
           44                 diff->sign = sign;
           45                 return;
           46         }
           47 
           48         sign = b1->sign;
           49         mpmagsub(b1, b2, diff);
           50         if(diff->top != 0)
           51                 diff->sign *= sign;
           52 }