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

Diff for /OpenXM_contrib2/asir2000/engine/H.c between version 1.6 and 1.7

version 1.6, 2001/10/09 01:36:09 version 1.7, 2002/03/15 02:52:10
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/H.c,v 1.5 2001/07/04 07:19:20 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/engine/H.c,v 1.6 2001/10/09 01:36:09 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "inline.h"  #include "inline.h"
Line 813  void henmain(LUM f,ML bqlist,ML cqlist,ML *listp)
Line 813  void henmain(LUM f,ML bqlist,ML cqlist,ML *listp)
 #endif  #endif
 }  }
   
   /*
           henmain_incremental(fl,bqlist,cqlist,start)
       fl = bqlist[0]*... mod q^start
   */
   
   void henmain_incremental(LUM f,LUM *bqlist,ML cqlist,
           int np, int mod, int start, int bound)
   {
           register int i,j,k;
           int *px,*py;
           int **pp,**pp1;
           int n,dr,tmp;
           UM wt,wq0,wq,wr,wm,wm0,wa,q;
           LUM wb0,wb1,tlum;
           UM *b,*c;
           LUM *l;
           ML list;
   
           n = DEG(f);
           W_LUMALLOC(n,bound,wb0); W_LUMALLOC(n,bound,wb1);
           wt = W_UMALLOC(n); wq0 = W_UMALLOC(n); wq = W_UMALLOC(n);
           wr = W_UMALLOC(n); wm = W_UMALLOC(2*n); wm0 = W_UMALLOC(2*n);
           wa = W_UMALLOC(2*n); q = W_UMALLOC(2*n);
           c = (UM *)cqlist->c; l = bqlist;
           b = (UM *)ALLOCA(n*sizeof(UM));
           for ( i = 0; i < np; i++ ) {
                   j = DEG(l[i]);
                   b[i] = W_UMALLOC(j);
                   DEG(b[i]) = j;
                   for ( pp = COEF(l[i]), px = COEF(b[i]); j >= 0; j-- )
                           px[j] = pp[j][0];
           }
   #if 0
           fprintf(stderr,"bound=%d\n",bound);
   #endif
           for ( i = start; i < bound; i++ ) {
   #if 0
                   fprintf(stderr,".");
   #endif
                   mullum(mod,i+1,l[0],l[1],wb0);
                   for ( j = 2; j < np; j++ ) {
                           mullum(mod,i+1,l[j],wb0,wb1);
                           tlum = wb0; wb0 = wb1; wb1 = tlum;
                   }
                   for ( j = n, px = COEF(wt); j >= 0; j-- )
                           px[j] = 0;
                   for ( j = n, pp = COEF(f), pp1 = COEF(wb0); j >= 0; j-- ) {
                           tmp = ( pp[j][i] - pp1[j][i] ) % mod;
                           COEF(wt)[j] = ( tmp < 0 ? tmp + mod : tmp );
                   }
                   degum(wt,n);
                   for ( j = n, px = COEF(wq0); j >= 0; j-- )
                           px[j] = 0;
                   for ( j = 1; j < np; j++ ) {
                           mulum(mod,wt,c[j],wm); dr = divum(mod,wm,b[j],q);
                           for ( k = DEG(q), px = COEF(wq0), py = COEF(q); k >= 0; k-- )
                                   px[k] = ( px[k] + py[k] ) % mod;
                           for ( k = dr, pp = COEF(l[j]), px = COEF(wm); k >= 0; k-- )
                                   pp[k][i] = px[k];
                   }
                   degum(wq0,n); mulum(mod,wq0,b[0],wm);
                   mulum(mod,wt,c[0],wm0); addum(mod,wm,wm0,wa);
                   for ( j = DEG(wa), pp = COEF(l[0]), px = COEF(wa); j >= 0; j-- )
                           pp[j][i] = px[j];
                   for ( j = n, px = COEF(wq0); j >= 0; j-- )
                           px[j] = 0;
           }
   #if 0
           fprintf(stderr,"\n");
   #endif
   }
   
 static double M;  static double M;
 static int E;  static int E;
   
Line 900  void ptolum(int q,int bound,P f,LUM fl)
Line 972  void ptolum(int q,int bound,P f,LUM fl)
                 c = pp[QTOS(DEG(dc))]; w = (unsigned int *)W_ALLOC(d);                  c = pp[QTOS(DEG(dc))]; w = (unsigned int *)W_ALLOC(d);
                 for ( i = 0; i < d; i++ )                  for ( i = 0; i < d; i++ )
                         w[i] = m[i];                          w[i] = m[i];
                 for ( i = 0; d >= 1; ) {                  for ( i = 0; i < bound && d >= 1; ) {
                         for ( j = d - 1, r = 0; j >= 0; j-- ) {                          for ( j = d - 1, r = 0; j >= 0; j-- ) {
                                 DSAB(q,r,w[j],w[j],r)                                  DSAB(q,r,w[j],w[j],r)
                         }                          }

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

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