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

Diff for /OpenXM_contrib2/asir2000/engine/P.c between version 1.6 and 1.9

version 1.6, 2003/06/19 07:08:19 version 1.9, 2004/03/11 09:52:56
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/P.c,v 1.5 2001/06/15 07:56:03 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/engine/P.c,v 1.8 2003/12/23 10:39:57 ohara Exp $
 */  */
 #ifndef FBASE  #ifndef FBASE
 #define FBASE  #define FBASE
Line 460  P *r;
Line 460  P *r;
         }          }
 }  }
   
   /* Euler derivation */
   void ediffp(vl,p,v,r)
   VL vl;
   P p;
   V v;
   P *r;
   {
           P t;
           DCP dc,dcr,dcr0;
   
           if ( !p || NUM(p) )
                   *r = 0;
           else {
                   if ( v == VR(p) ) {
                           for ( dc = DC(p), dcr0 = 0;
                                     dc && DEG(dc); dc = NEXT(dc) ) {
                                   MULPQ(COEF(dc),(P)DEG(dc),&t);
                                   if ( t ) {
                                           NEXTDC(dcr0,dcr);
                                           DEG(dcr) = DEG(dc);
                                           COEF(dcr) = t;
                                   }
                           }
                           if ( !dcr0 )
                                   *r = 0;
                           else {
                                   NEXT(dcr) = 0; MKP(v,dcr0,*r);
                           }
                   } else {
                           for ( dc = DC(p), dcr0 = 0; dc; dc = NEXT(dc) ) {
                                   ediffp(vl,COEF(dc),v,&t);
                                   if ( t ) {
                                           NEXTDC(dcr0,dcr); DEG(dcr) = DEG(dc); COEF(dcr) = t;
                                   }
                           }
                           if ( !dcr0 )
                                   *r = 0;
                           else {
                                   NEXT(dcr) = 0; MKP(VR(p),dcr0,*r);
                           }
                   }
           }
   }
   
 void coefp(p,d,pr)  void coefp(p,d,pr)
 P p;  P p;
 int d;  int d;
Line 530  P p1,p2;
Line 574  P p1,p2;
         }          }
 }  }
   
   int equalp(vl,p1,p2)
   VL vl;
   P p1,p2;
   {
           DCP dc1,dc2;
           V v1,v2;
   
           if ( !p1 ) {
                   if ( !p2 ) return 1;
                   else return 0;
           }
           /* p1 != 0 */
           if ( !p2 ) return 0;
   
           /* p1 != 0, p2 != 0 */
           if ( NUM(p1) ) {
                   if ( !NUM(p2) ) return 0;
                   /* p1 and p2 are numbers */
                   if ( NID((Num)p1) != NID((Num)p2) ) return 0;
                   if ( !(*cmpnumt[NID(p1),NID(p1)])(p1,p2) ) return 1;
                   return 0;
           }
           if ( VR(p1) != VR(p2) ) return 0;
           for ( dc1 = DC(p1), dc2 = DC(p2);
                   dc1 && dc2; dc1 = NEXT(dc1), dc2 = NEXT(dc2) ) {
                   if ( cmpq(DEG(dc1),DEG(dc2)) ) return 0;
                   else if ( !equalp(vl,COEF(dc1),COEF(dc2)) ) return 0;
           }
           if ( dc1 || dc2 ) return 0;
           else return 1;
   }
   
 void csump(vl,p,c)  void csump(vl,p,c)
 VL vl;  VL vl;
 P p;  P p;
Line 695  void mulpc_trunc(VL vl,P p,P c,VN vn,P *pr)
Line 771  void mulpc_trunc(VL vl,P p,P c,VN vn,P *pr)
                         NEXT(dcr) = 0; MKP(VR(p),dcr0,*pr);                          NEXT(dcr) = 0; MKP(VR(p),dcr0,*pr);
                 } else                  } else
                         *pr = 0;                          *pr = 0;
           }
   }
   
   void quop_trunc(VL vl,P p1,P p2,VN vn,P *pr)
   {
           DCP dc,dcq0,dcq;
           P t,s,m,lc2,qt;
           V v1,v2;
           Q d2;
           VN vn1;
   
           if ( !p1 )
                   *pr = 0;
           else if ( NUM(p2) )
                   divsp(vl,p1,p2,pr);
           else if ( (v1 = VR(p1)) != (v2 = VR(p2)) ) {
                   for ( dcq0 = 0, dc = DC(p1); dc; dc = NEXT(dc) ) {
                           NEXTDC(dcq0,dcq);
                           DEG(dcq) = DEG(dc);
                           quop_trunc(vl,COEF(dc),p2,vn,&COEF(dcq));
                   }
                   NEXT(dcq) = 0;
                   MKP(v1,dcq0,*pr);
           } else {
                   d2 = DEG(DC(p2));
                   lc2 = COEF(DC(p2));
                   t = p1;
                   dcq0 = 0;
                   /* vn1 = degree list of LC(p2) */
                   for ( vn1 = vn; vn1->v != v1; vn1++ );
                   vn1++;
                   while ( t ) {
                           dc = DC(t);
                           NEXTDC(dcq0,dcq);
                           subq(DEG(dc),d2,&DEG(dcq));
                           quop_trunc(vl,COEF(dc),lc2,vn1,&COEF(dcq));
                           NEXT(dcq) = 0;
                           MKP(v1,dcq,qt);
                           mulp_trunc(vl,p2,qt,vn,&m);
                           subp(vl,t,m,&s); t = s;
                   }
                   NEXT(dcq) = 0;
                   MKP(v1,dcq0,*pr);
         }          }
 }  }
 #endif  #endif

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.9

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