[BACK]Return to dist.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

Diff for /OpenXM_contrib2/asir2000/engine/dist.c between version 1.35 and 1.36

version 1.35, 2005/11/25 02:43:39 version 1.36, 2005/11/25 07:18:32
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/engine/dist.c,v 1.34 2005/11/24 08:16:03 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/engine/dist.c,v 1.35 2005/11/25 02:43:39 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
   
Line 2067  void mulnbpnbm(VL vl,NBP p,NBM m, NBP *rp);
Line 2067  void mulnbpnbm(VL vl,NBP p,NBM m, NBP *rp);
   
 void mulnbp(VL vl,NBP p1,NBP p2, NBP *rp)  void mulnbp(VL vl,NBP p1,NBP p2, NBP *rp)
 {  {
         NODE b;          NODE b,n;
         NBP r,t,s;          NBP r,t,s;
           NBM m;
   
         if ( !p1 || !p2 ) *rp = 0;          if ( !p1 || !p2 ) {
         else if ( length(BDY(p1)) < length(BDY(p2)) ) {                  *rp = 0; return;
           }
           if ( OID(p1) != O_NBP ) {
                   if ( !NUM(p1) || !RATN(p1) ) error("mulnbp : invalid argument");
                   NEWNBM(m); m->d = 0; m->b = 0; m->c = (Q)p1;
                   MKNODE(n,m,0); MKNBP(p1,n);
           }
           if ( OID(p2) != O_NBP ) {
                   if ( !NUM(p2) || !RATN(p2) ) error("mulnbp : invalid argument");
                   NEWNBM(m); m->d = 0; m->b = 0; m->c = (Q)p2;
                   MKNODE(n,m,0); MKNBP(p2,n);
           }
           if ( length(BDY(p1)) < length(BDY(p2)) ) {
                 for ( r = 0, b = BDY(p1); b; b = NEXT(b) ) {                  for ( r = 0, b = BDY(p1); b; b = NEXT(b) ) {
                         mulnbmnbp(vl,(NBM)BDY(b),p2,&t);                          mulnbmnbp(vl,(NBM)BDY(b),p2,&t);
                         addnbp(vl,r,t,&s); r = s;                          addnbp(vl,r,t,&s); r = s;
Line 2145  void pwrnbp(VL vl,NBP a,Q q,NBP *c)
Line 2158  void pwrnbp(VL vl,NBP a,Q q,NBP *c)
   
 void shuffle_mulnbp(VL vl,NBP p1,NBP p2, NBP *rp)  void shuffle_mulnbp(VL vl,NBP p1,NBP p2, NBP *rp)
 {  {
         NODE b1,b2;          NODE b1,b2,n;
         NBP r,t,s;          NBP r,t,s;
         NBM m;          NBM m;
   
         if ( !p1 || !p2 ) *rp = 0;          if ( !p1 || !p2 ) {
         else {                  *rp = 0; return;
                 for ( r = 0, b1 = BDY(p1); b1; b1 = NEXT(b1) )  
                         for ( m = BDY(b1), b2 = BDY(p2); b2; b2 = NEXT(b2) ) {  
                                 t = shuffle_mul_nbm(m,(NBM)BDY(b2));  
                                 addnbp(vl,r,t,&s); r = s;  
                         }  
                 *rp = r;  
         }          }
           if ( OID(p1) != O_NBP ) {
                   if ( !NUM(p1) || !RATN(p1) ) error("mulnbp : invalid argument");
                   NEWNBM(m); m->d = 0; m->b = 0; m->c = (Q)p1;
                   MKNODE(n,m,0); MKNBP(p1,n);
           }
           if ( OID(p2) != O_NBP ) {
                   if ( !NUM(p2) || !RATN(p2) ) error("mulnbp : invalid argument");
                   NEWNBM(m); m->d = 0; m->b = 0; m->c = (Q)p2;
                   MKNODE(n,m,0); MKNBP(p2,n);
           }
           for ( r = 0, b1 = BDY(p1); b1; b1 = NEXT(b1) )
                   for ( m = BDY(b1), b2 = BDY(p2); b2; b2 = NEXT(b2) ) {
                           t = shuffle_mul_nbm(m,(NBM)BDY(b2));
                           addnbp(vl,r,t,&s); r = s;
                   }
           *rp = r;
 }  }
   
 void harmonic_mulnbp(VL vl,NBP p1,NBP p2, NBP *rp)  void harmonic_mulnbp(VL vl,NBP p1,NBP p2, NBP *rp)
 {  {
         NODE b1,b2;          NODE b1,b2,n;
         NBP r,t,s;          NBP r,t,s;
         NBM m;          NBM m;
   
         if ( !p1 || !p2 ) *rp = 0;          if ( !p1 || !p2 ) {
         else {                  *rp = 0; return;
                 for ( r = 0, b1 = BDY(p1); b1; b1 = NEXT(b1) )  
                         for ( m = BDY(b1), b2 = BDY(p2); b2; b2 = NEXT(b2) ) {  
                                 t = harmonic_mul_nbm(m,(NBM)BDY(b2));  
                                 addnbp(vl,r,t,&s); r = s;  
                         }  
                 *rp = r;  
         }          }
           if ( OID(p1) != O_NBP ) {
                   if ( !NUM(p1) || !RATN(p1) ) error("mulnbp : invalid argument");
                   NEWNBM(m); m->d = 0; m->b = 0; m->c = (Q)p1;
                   MKNODE(n,m,0); MKNBP(p1,n);
           }
           if ( OID(p2) != O_NBP ) {
                   if ( !NUM(p2) || !RATN(p2) ) error("mulnbp : invalid argument");
                   NEWNBM(m); m->d = 0; m->b = 0; m->c = (Q)p2;
                   MKNODE(n,m,0); MKNBP(p2,n);
           }
           for ( r = 0, b1 = BDY(p1); b1; b1 = NEXT(b1) )
                   for ( m = BDY(b1), b2 = BDY(p2); b2; b2 = NEXT(b2) ) {
                           t = harmonic_mul_nbm(m,(NBM)BDY(b2));
                           addnbp(vl,r,t,&s); r = s;
                   }
           *rp = r;
 }  }

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.36

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>