[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.14 and 1.17

version 1.14, 2001/07/03 01:41:25 version 1.17, 2001/09/03 07:01:06
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/Hgfs.c,v 1.13 2001/06/29 09:08:53 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/Hgfs.c,v 1.16 2001/09/03 01:04:26 noro Exp $ */
   
 #include "ca.h"  #include "ca.h"
   
Line 614  ML *listp;
Line 614  ML *listp;
         /* f(x,y) -> f(x,y+ev) */          /* f(x,y) -> f(x,y+ev) */
         fl = BMALLOC(dx,dy);          fl = BMALLOC(dx,dy);
         ptosfbm(dy,f,fl);          ptosfbm(dy,f,fl);
         shiftsfbm(fl,FTOIF(CONT(ev)));          if ( ev ) shiftsfbm(fl,FTOIF(CONT(ev)));
   
         /* sf = f(x+ev) */          /* sf = f(x+ev) */
         sfbmtop(fl,x,y,&sf);          sfbmtop(fl,x,y,&sf);
Line 1028  DCP *dcp;
Line 1028  DCP *dcp;
                 return;                  return;
         }          }
         sfdtest(sf,list,x,y,&dc);          sfdtest(sf,list,x,y,&dc);
         dx = getdeg(x,sf);          if ( ev ) {
         dy = getdeg(y,sf);                  dx = getdeg(x,sf);
         W_BMALLOC(dx,dy,fl);                  dy = getdeg(y,sf);
         for ( dct = dc; dct; dct = NEXT(dct) ) {                  W_BMALLOC(dx,dy,fl);
                 ptosfbm(dy,COEF(dct),fl);                  for ( dct = dc; dct; dct = NEXT(dct) ) {
                 shiftsfbm(fl,_chsgnsf(FTOIF(CONT(ev))));                          ptosfbm(dy,COEF(dct),fl);
                 sfbmtop(fl,x,y,&COEF(dct));                          shiftsfbm(fl,_chsgnsf(FTOIF(CONT(ev))));
                           sfbmtop(fl,x,y,&COEF(dct));
                   }
         }          }
         *dcp = dc;          *dcp = dc;
 }  }
Line 1367  P *qp;
Line 1369  P *qp;
         if ( j >= 0 )          if ( j >= 0 )
                 return 0;                  return 0;
         sfbmtop(ql,x,y,qp);          sfbmtop(ql,x,y,qp);
   }
   
   /* XXX generate an irreducible poly of degree n */
   
   extern int current_gfs_q1;
   
   void generate_defpoly_sfum(n,dp)
   int n;
   UM *dp;
   {
           UM r,dr,t,g;
           UM *f;
           int *c,*w;
           int max,i,j;
   
           *dp = r = UMALLOC(n);
           DEG(r) = n;
           c = COEF(r);
           c[n] = _onesf();
           max = current_gfs_q1;
           w = (int *)ALLOCA(n*sizeof(int));
           bzero(w,n*sizeof(int));
   
           dr = W_UMALLOC(n); t = W_UMALLOC(n); g = W_UMALLOC(n);
           f = (UM *)ALLOCA((n+1)*sizeof(UM));
           while ( 1 ) {
                   for ( i = 0; i < n && w[i] == max; i++ );
                   if ( i == n ) {
                           /* XXX cannot happen */
                           error("generate_defpoly_sfum : cannot happen");
                   }
                   for ( j = 0; j < i; j++ )
                           w[j] = 0;
                   w[i]++;
                   for ( i = 0; i < n; i++ )
                           c[i] = w[i]?FTOIF(w[i]-1):0;
                   if ( !c[0] )
                           continue;
                   diffsfum(r,dr); cpyum(r,t); gcdsfum(t,dr,g);
                   if ( DEG(g) > 0 )
                           continue;
   
                   czsfum(r,f);
                   for ( i = 0; f[i]; i++ );
                   if ( i == 1 )
                           return;
           }
 }  }

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.17

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