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

Diff for /OpenXM_contrib2/asir2000/engine/Fgfs.c between version 1.12 and 1.16

version 1.12, 2002/11/26 07:09:45 version 1.16, 2003/01/06 09:23:27
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/Fgfs.c,v 1.11 2002/11/22 08:44:57 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/Fgfs.c,v 1.15 2003/01/04 09:06:17 noro Exp $ */
   
 #include "ca.h"  #include "ca.h"
   
Line 50  void sqfrsf(VL vl, P f, DCP *dcp)
Line 50  void sqfrsf(VL vl, P f, DCP *dcp)
 {  {
         DCP dc,dct;          DCP dc,dct;
         Obj obj;          Obj obj;
         P t,s,c;          P t,s,c,cont;
         VL tvl,nvl;          VL tvl,onevl;
   
         simp_ff((Obj)f,&obj); f = (P)obj;          simp_ff((Obj)f,&obj); f = (P)obj;
         lex_lc(f,&c); divsp(vl,f,c,&t); f = t;          lex_lc(f,&c); divsp(vl,f,c,&t); f = t;
         monomialfctr(vl,f,&t,&dc); f = t;          monomialfctr(vl,f,&t,&dc); f = t;
         clctv(vl,f,&tvl); vl = tvl;          clctv(vl,f,&tvl); vl = tvl;
           NEWVL(onevl); NEXT(onevl)=0;
         if ( !vl )          if ( !vl )
                 ;                  ;
         else if ( !NEXT(vl) ) {          else if ( !NEXT(vl) ) {
Line 65  void sqfrsf(VL vl, P f, DCP *dcp)
Line 66  void sqfrsf(VL vl, P f, DCP *dcp)
         } else {          } else {
                 t = f;                  t = f;
                 for ( tvl = vl; tvl; tvl = NEXT(tvl) ) {                  for ( tvl = vl; tvl; tvl = NEXT(tvl) ) {
                         reordvar(vl,tvl->v,&nvl);                          onevl->v = tvl->v;
                         cont_pp_mv_sf(vl,NEXT(nvl),t,&c,&s); t = s;                          cont_pp_mv_sf(vl,onevl,t,&cont,&s); t = s;
                         sqfrsf(vl,c,&dct);                          sqfrsf(vl,cont,&dct);
                         dc = append_dc(dc,NEXT(dct));                          dc = append_dc(dc,NEXT(dct));
                 }                  }
                 sqfrsfmain(vl,t,&dct);                  sqfrsfmain(vl,t,&dct);
Line 473  void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp)
Line 474  void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp)
         MP t;          MP t;
         int i,m;          int i,m;
         P *ps;          P *ps;
           struct order_spec spec, currentspec;
           extern struct order_spec dp_current_spec;
   
           currentspec = dp_current_spec;
           create_order_spec(0,&spec);
           initd(&spec);
         ptod(vl,rvl,p,&dp);          ptod(vl,rvl,p,&dp);
         for ( t = BDY(dp), m = 0; t; t = NEXT(t), m++ );          for ( t = BDY(dp), m = 0; t; t = NEXT(t), m++ );
         ps = (P *)ALLOCA(m*sizeof(P));          ps = (P *)ALLOCA(m*sizeof(P));
Line 481  void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp)
Line 487  void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp)
                 ps[i] = C(t);                  ps[i] = C(t);
         gcdsf(vl,ps,m,c);          gcdsf(vl,ps,m,c);
         divsp(vl,p,*c,pp);          divsp(vl,p,*c,pp);
           initd(&currentspec);
 }  }
   
 void mfctrsf(VL vl, P f, DCP *dcp)  void mfctrsf(VL vl, P f, DCP *dcp)
Line 822  void mfctrsf_hensel(VL vl,VL rvl,P f,P pp0,P u0,P v0,P
Line 829  void mfctrsf_hensel(VL vl,VL rvl,P f,P pp0,P u0,P v0,P
         P *cu,*cv;          P *cu,*cv;
         GFSN inv;          GFSN inv;
   
         /* adjust coeffs */          /* check the validity of lc's and adjust coeffs */
           /* f                -> lcu*lcv*x^(m+l)+... */
           mulp(vl,lcu,lcv,&t);
           if ( !divtp(vl,t,LC(f),&m) ) {
                   *up = 0; return;
           }
           mulp(vl,m,f,&t); f = t;
         /* u0 = am x^m+ ... -> lcu*x^m + a(m-1)*(lcu(mev)/am)*x^(m-1)+... */          /* u0 = am x^m+ ... -> lcu*x^m + a(m-1)*(lcu(mev)/am)*x^(m-1)+... */
         /* v0 = bm x^l+ ... -> lcv*x^l + b(l-1)*(lcv(mev)/bl)*x^(l-1)+... */          /* v0 = bm x^l+ ... -> lcv*x^l + b(l-1)*(lcv(mev)/bl)*x^(l-1)+... */
         /* f                -> lcu*lcv*x^(m+l)+... */  
         adjust_coef_sf(vl,rvl,lcu,u0,mev,&u);          adjust_coef_sf(vl,rvl,lcu,u0,mev,&u);
         adjust_coef_sf(vl,rvl,lcv,v0,mev,&v);          adjust_coef_sf(vl,rvl,lcv,v0,mev,&v);
         mulp(vl,lcu,lcv,&t); divsp(vl,t,LC(f),&m); mulp(vl,m,f,&t); f = t;  
   
         /* f <- f(X+mev), u <- u(X+mev), v <- v(X+mev) */          /* f <- f(X+mev), u <- u(X+mev), v <- v(X+mev) */
         fin = f;          fin = f;

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.16

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