[BACK]Return to dp-supp.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/dp-supp.c between version 1.21 and 1.22

version 1.21, 2002/01/28 00:54:41 version 1.22, 2002/12/27 07:37:57
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/builtin/dp-supp.c,v 1.20 2001/10/09 01:36:05 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.21 2002/01/28 00:54:41 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 371  void dp_ptozp2_d(DP p0,DP p1,DP *hp,DP *rp)
Line 371  void dp_ptozp2_d(DP p0,DP p1,DP *hp,DP *rp)
         *hp = h; *rp = r;          *hp = h; *rp = r;
 }  }
   
   int have_sf_coef(P p)
   {
           DCP dc;
   
           if ( !p )
                   return 0;
           else if ( NUM(p) )
                   return NID((Num)p) == N_GFS ? 1 : 0;
           else {
                   for ( dc = DC(p); dc; dc = NEXT(dc) )
                           if ( have_sf_coef(COEF(dc)) )
                                   return 1;
                   return 0;
           }
   }
   
 void dp_prim(DP p,DP *rp)  void dp_prim(DP p,DP *rp)
 {  {
         P t,g;          P t,g;
Line 383  void dp_prim(DP p,DP *rp)
Line 399  void dp_prim(DP p,DP *rp)
   
         if ( !p )          if ( !p )
                 *rp = 0;                  *rp = 0;
         else if ( dp_fcoeffs )          else if ( dp_fcoeffs ) {
                   for ( m = BDY(p); m; m = NEXT(m) ) {
                           if ( OID(m->c) == O_N ) {
                                   /* GCD of coeffs = 1 */
                                   *rp = p;
                                   return;
                           } else if ( have_sf_coef(m->c) ) {
                                   /* compute GCD over the finite fieid */
                                   for ( m = BDY(p), n = 0; m; m = NEXT(m), n++ );
                                   w = (P *)ALLOCA(n*sizeof(P));
                                   for ( m = BDY(p), i = 0; i < n; m = NEXT(m), i++ )
                                           w[i] = m->c;
                                   gcdsf(CO,w,n,&g);
                                   if ( NUM(g) )
                                           *rp = p;
                                   else {
                                           for ( mr0 = 0, m = BDY(p); m; m = NEXT(m) ) {
                                                   NEXTMP(mr0,mr); divsp(CO,m->c,g,&mr->c); mr->dl = m->dl;
                                           }
                                           NEXT(mr) = 0; MKDP(p->nv,mr0,*rp); (*rp)->sugar = p->sugar;
                                   }
                                   return;
                           }
                   }
                   /* all coeffs are poly over Q */
                 *rp = p;                  *rp = p;
         else if ( NoGCD )          } else if ( NoGCD )
                 dp_ptozp(p,rp);                  dp_ptozp(p,rp);
         else {          else {
                 dp_ptozp(p,&p1); p = p1;                  dp_ptozp(p,&p1); p = p1;

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

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