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

Diff for /OpenXM_contrib2/asir2000/engine/Hgfs.c between version 1.27 and 1.29

version 1.27, 2002/11/01 05:43:35 version 1.29, 2002/11/22 08:44:57
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/Hgfs.c,v 1.26 2002/10/25 02:43:40 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/Hgfs.c,v 1.28 2002/11/22 07:32:10 noro Exp $ */
   
 #include "ca.h"  #include "ca.h"
 #include "inline.h"  #include "inline.h"
Line 79  void gensqfrsfum(UM p,struct oDUM *dc)
Line 79  void gensqfrsfum(UM p,struct oDUM *dc)
 {  {
         int n,i,j,d,mod;          int n,i,j,d,mod;
         UM t,s,g,f,f1,b;          UM t,s,g,f,f1,b;
           GFS u,v;
   
         if ( (n = DEG(p)) == 1 ) {          if ( (n = DEG(p)) == 1 ) {
                 dc[0].f = UMALLOC(DEG(p)); cpyum(p,dc[0].f); dc[0].n = 1;                  dc[0].f = UMALLOC(DEG(p)); cpyum(p,dc[0].f); dc[0].n = 1;
Line 117  void gensqfrsfum(UM p,struct oDUM *dc)
Line 118  void gensqfrsfum(UM p,struct oDUM *dc)
                                 break;                                  break;
                         else {                          else {
                                 DEG(s) = DEG(t)/mod;                                  DEG(s) = DEG(t)/mod;
                                 for ( j = 0; j <= DEG(t); j++ )                                  for ( j = 0; j <= DEG(t); j++ ) {
                                         COEF(s)[j] = COEF(t)[j*mod];                                          iftogfs(COEF(t)[j*mod],&u);
                                           pthrootgfs(u,&v);
                                           COEF(s)[j] = v?FTOIF(CONT(v)):0;
                                   }
                                 cpyum(s,b); d *= mod;                                  cpyum(s,b); d *= mod;
                         }                          }
                 }                  }
Line 506  void canzassf(UM f,int d,UM *r)
Line 510  void canzassf(UM f,int d,UM *r)
   
 /* Hensel related functions */  /* Hensel related functions */
   
 int sfberle(VL,P,int,GFS *,DCP *);  int sfberle(V,V,P,int,GFS *,DCP *);
 void sfgcdgen(P,ML,ML *);  void sfgcdgen(P,ML,ML *);
 void sfhenmain2(BM,UM,UM,int,BM *);  void sfhenmain2(BM,UM,UM,int,BM *);
 void ptosfbm(int,P,BM);  void ptosfbm(int,P,BM);
   void sfhensel(int count,P f,V x,V y,int degbound,GFS *evp,P *sfp,ML *listp);
   
 /* f = f(x,y) */  /* f = f(x,y) */
   
 void sfhensel(int count,P f,V x,int degbound,GFS *evp,P *sfp,ML *listp)  void sfhensel(int count,P f,V x,V y,int degbound,GFS *evp,P *sfp,ML *listp)
 {  {
         int i;          int i;
         int fn;          int fn;
         ML rlist;          ML rlist;
         BM fl;          BM fl;
         VL vl,nvl;          VL vl,nvl;
         V y;  
         int dx,dy,bound;          int dx,dy,bound;
         GFS ev;          GFS ev;
         P f1,t,c,sf;          P f1,t,c,sf;
Line 534  void sfhensel(int count,P f,V x,int degbound,GFS *evp,
Line 538  void sfhensel(int count,P f,V x,int degbound,GFS *evp,
                 reordvar(vl,x,&nvl); reorderp(nvl,vl,f,&f1);                  reordvar(vl,x,&nvl); reorderp(nvl,vl,f,&f1);
                 vl = nvl; f = f1;                  vl = nvl; f = f1;
         }          }
         y = vl->next->v;          if ( vl->next )
                   y = vl->next->v;
         dx = getdeg(x,f);          dx = getdeg(x,f);
         dy = getdeg(y,f);          dy = getdeg(y,f);
         if ( dx == 1 ) {          if ( dx == 1 ) {
                 *listp = rlist = MLALLOC(1); rlist->n = 1; rlist->c[0] = 0;                  *listp = rlist = MLALLOC(1); rlist->n = 1; rlist->c[0] = 0;
                 return;                  return;
         }          }
         fn = sfberle(vl,f,count,&ev,&dc);          fn = sfberle(x,y,f,count,&ev,&dc);
         if ( fn <= 1 ) {          if ( fn <= 1 ) {
                 /* fn == 0 => short of evaluation points */                  /* fn == 0 => short of evaluation points */
                 *listp = rlist = MLALLOC(1); rlist->n = fn; rlist->c[0] = 0;                  *listp = rlist = MLALLOC(1); rlist->n = fn; rlist->c[0] = 0;
Line 640  void sfhensel(int count,P f,V x,int degbound,GFS *evp,
Line 645  void sfhensel(int count,P f,V x,int degbound,GFS *evp,
   
 /* main variable of f = x */  /* main variable of f = x */
   
 int sfberle(VL vl,P f,int count,GFS *ev,DCP *dcp)  int sfberle(V x,V y,P f,int count,GFS *ev,DCP *dcp)
 {  {
         UM wf,wf1,wf2,wfs,gcd;          UM wf,wf1,wf2,wfs,gcd;
         int fn,n;          int fn,n;
         GFS m,fm;          GFS m,fm;
         DCP dc,dct,dc0;          DCP dc,dct,dc0;
         VL nvl;          VL vl;
         V x,y;  
         P lc,lc0,f0;          P lc,lc0,f0;
         Obj obj;          Obj obj;
         int j,q,index,i;          int j,q,index,i;
   
         clctv(vl,f,&nvl); vl = nvl;          NEWVL(vl); vl->v = x;
         x = vl->v; y = vl->next->v;          NEWVL(NEXT(vl)); NEXT(vl)->v = y;
           NEXT(NEXT(vl)) =0;
         simp_ff((Obj)f,&obj); f = (P)obj;          simp_ff((Obj)f,&obj); f = (P)obj;
         n = QTOS(DEG(DC(f)));          n = QTOS(DEG(DC(f)));
         wf = W_UMALLOC(n); wf1 = W_UMALLOC(n); wf2 = W_UMALLOC(n);          wf = W_UMALLOC(n); wf1 = W_UMALLOC(n); wf2 = W_UMALLOC(n);
Line 1077  void sfbfctr(P f,V x,V y,int degbound,DCP *dcp)
Line 1082  void sfbfctr(P f,V x,V y,int degbound,DCP *dcp)
         int dx,dy;          int dx,dy;
   
         /* sf(x) = f(x+ev) = list->c[0]*list->c[1]*... */          /* sf(x) = f(x+ev) = list->c[0]*list->c[1]*... */
         sfhensel(5,f,x,degbound,&ev,&sf,&list);          sfhensel(5,f,x,y,degbound,&ev,&sf,&list);
         if ( list->n == 0 )          if ( list->n == 0 )
                 error("sfbfctr : short of evaluation points");                  error("sfbfctr : short of evaluation points");
         else if ( list->n == 1 ) {          else if ( list->n == 1 ) {
Line 1111  void sfbfctr_shift(P f,V x,V y,int degbound,GFS *evp,P
Line 1116  void sfbfctr_shift(P f,V x,V y,int degbound,GFS *evp,P
         int dx,dy;          int dx,dy;
   
         /* sf(x) = f(x+ev) = list->c[0]*list->c[1]*... */          /* sf(x) = f(x+ev) = list->c[0]*list->c[1]*... */
         sfhensel(5,f,x,degbound,&ev,&sf,&list);          sfhensel(5,f,x,y,degbound,&ev,&sf,&list);
         if ( list->n == 0 )          if ( list->n == 0 )
                 error("sfbfctr_shift : short of evaluation points");                  error("sfbfctr_shift : short of evaluation points");
         else if ( list->n == 1 ) {          else if ( list->n == 1 ) {

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.29

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