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

Diff for /OpenXM_contrib2/asir2018/engine/PU.c between version 1.1 and 1.2

version 1.1, 2018/09/19 05:45:07 version 1.2, 2018/09/28 08:20:28
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: OpenXM_contrib2/asir2018/engine/PU.c,v 1.1 2018/09/19 05:45:07 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
   
Line 365  void sprs(VL vl,V v,P p1,P p2,P *pr)
Line 365  void sprs(VL vl,V v,P p1,P p2,P *pr)
     if ( !r )      if ( !r )
       break;        break;
   
     d = deg(v,g1) - deg(v,g2); STOQ(d,dq);      d = deg(v,g1) - deg(v,g2); STOZ(d,dq);
     pwrp(nvl,h,dq,&m); mulp(nvl,m,x,&m1); g1 = g2;      pwrp(nvl,h,dq,&m); mulp(nvl,m,x,&m1); g1 = g2;
     divsp(nvl,r,m1,&g2); x = LC(g1); /* g1 is not const w.r.t v */      divsp(nvl,r,m1,&g2); x = LC(g1); /* g1 is not const w.r.t v */
     pwrp(nvl,x,dq,&m1); mulp(nvl,m1,h,&m2);      pwrp(nvl,x,dq,&m1); mulp(nvl,m1,h,&m2);
Line 392  void resultp(VL vl,V v,P p1,P p2,P *pr)
Line 392  void resultp(VL vl,V v,P p1,P p2,P *pr)
       *pr = 0;        *pr = 0;
       return;        return;
     } else {      } else {
       d = deg(v,q2); STOQ(d,dq);        d = deg(v,q2); STOZ(d,dq);
       pwrp(vl,q1,dq,pr);        pwrp(vl,q1,dq,pr);
       return;        return;
     }      }
   else if ( VR(q2) != v ) {    else if ( VR(q2) != v ) {
     d = deg(v,q1); STOQ(d,dq);      d = deg(v,q1); STOZ(d,dq);
     pwrp(vl,q2,dq,pr);      pwrp(vl,q2,dq,pr);
     return;      return;
   }    }
Line 413  void resultp(VL vl,V v,P p1,P p2,P *pr)
Line 413  void resultp(VL vl,V v,P p1,P p2,P *pr)
   } else if ( d1 < d2 ) {    } else if ( d1 < d2 ) {
     g2 = q1; g1 = q2;      g2 = q1; g1 = q2;
     if ( (d1 % 2) && (d2 % 2) ) {      if ( (d1 % 2) && (d2 % 2) ) {
       STOQ(-1,dq); adj = (P)dq;        STOZ(-1,dq); adj = (P)dq;
     } else      } else
       adj = (P)ONE;        adj = (P)ONE;
   } else {    } else {
     premp(nvl,q1,q2,&t);      premp(nvl,q1,q2,&t);
     d = deg(v,t); STOQ(d,dq); pwrp(nvl,LC(q2),dq,&adj);      d = deg(v,t); STOZ(d,dq); pwrp(nvl,LC(q2),dq,&adj);
     g1 = q2; g2 = t;      g1 = q2; g2 = t;
     if ( d1 % 2 ) {      if ( d1 % 2 ) {
       chsgnp(adj,&t); adj = t;        chsgnp(adj,&t); adj = t;
Line 444  void resultp(VL vl,V v,P p1,P p2,P *pr)
Line 444  void resultp(VL vl,V v,P p1,P p2,P *pr)
         j = k - 1;          j = k - 1;
       }        }
     else {      else {
       d = j - k; STOQ(d,dq);        d = j - k; STOZ(d,dq);
       pwrp(nvl,(VR(g2)==v?LC(g2):g2),dq,&m);        pwrp(nvl,(VR(g2)==v?LC(g2):g2),dq,&m);
       mulp(nvl,g2,m,&m1);        mulp(nvl,g2,m,&m1);
       pwrp(nvl,lc,dq,&m); divsp(nvl,m1,m,&t);        pwrp(nvl,lc,dq,&m); divsp(nvl,m1,m,&t);
Line 481  void srch2(VL vl,V v,P p1,P p2,P *pr)
Line 481  void srch2(VL vl,V v,P p1,P p2,P *pr)
       *pr = 0;        *pr = 0;
       return;        return;
     } else {      } else {
       d = deg(v,q2); STOQ(d,dq);        d = deg(v,q2); STOZ(d,dq);
       pwrp(vl,q1,dq,pr);        pwrp(vl,q1,dq,pr);
       return;        return;
     }      }
   else if ( VR(q2) != v ) {    else if ( VR(q2) != v ) {
     d = deg(v,q1); STOQ(d,dq);      d = deg(v,q1); STOZ(d,dq);
     pwrp(vl,q2,dq,pr);      pwrp(vl,q2,dq,pr);
     return;      return;
   }    }
Line 508  void srch2(VL vl,V v,P p1,P p2,P *pr)
Line 508  void srch2(VL vl,V v,P p1,P p2,P *pr)
     adj = (P)ONE;      adj = (P)ONE;
   } else {    } else {
     premp(nvl,g1,g2,&t);      premp(nvl,g1,g2,&t);
     d = deg(v,t); STOQ(d,dq);      d = deg(v,t); STOZ(d,dq);
     pwrp(nvl,LC(g2),dq,&adj);      pwrp(nvl,LC(g2),dq,&adj);
     g1 = g2; g2 = t;      g1 = g2; g2 = t;
     j = deg(v,g1) - 1;      j = deg(v,g1) - 1;
Line 533  void srch2(VL vl,V v,P p1,P p2,P *pr)
Line 533  void srch2(VL vl,V v,P p1,P p2,P *pr)
         j = k - 1;          j = k - 1;
       }        }
     else {      else {
       d = j - k; STOQ(d,dq);        d = j - k; STOZ(d,dq);
       pwrp(nvl,(VR(g2)==v?LC(g2):g2),dq,&m);        pwrp(nvl,(VR(g2)==v?LC(g2):g2),dq,&m);
       mulp(nvl,g2,m,&m1);        mulp(nvl,g2,m,&m1);
       pwrp(nvl,lc,dq,&m); divsp(nvl,m1,m,&t);        pwrp(nvl,lc,dq,&m); divsp(nvl,m1,m,&t);
Line 582  void srcr(VL vl,V v,P p1,P p2,P *pr)
Line 582  void srcr(VL vl,V v,P p1,P p2,P *pr)
   norm1c(q1,&a); norm1c(q2,&b);    norm1c(q1,&a); norm1c(q2,&b);
   n = DEG(DC(q1)); m = DEG(DC(q2));    n = DEG(DC(q1)); m = DEG(DC(q2));
   pwrq(a,(Q)m,&w); pwrq(b,(Q)n,&s); mulq(w,s,&u);    pwrq(a,(Q)m,&w); pwrq(b,(Q)n,&s); mulq(w,s,&u);
   factorialz(QTOS(n)+QTOS(m),&t);    factorialz(ZTOS(n)+ZTOS(m),&t);
   mulq(u,(Q)t,&s); addq(s,s,&f);    mulq(u,(Q)t,&s); addq(s,s,&f);
   for ( index = 0, q = (Q)ONE, c = 0; cmpq(f,q) >= 0; ) {    for ( index = 0, q = (Q)ONE, c = 0; cmpq(f,q) >= 0; ) {
     mod = get_lprime(index++);      mod = get_lprime(index++);
Line 595  void srcr(VL vl,V v,P p1,P p2,P *pr)
Line 595  void srcr(VL vl,V v,P p1,P p2,P *pr)
     ptomp(mod,q1,&tg1); ptomp(mod,q2,&tg2);      ptomp(mod,q1,&tg1); ptomp(mod,q2,&tg2);
     srchmp(nvl,mod,v,tg1,tg2,&resg);      srchmp(nvl,mod,v,tg1,tg2,&resg);
     chnremp(nvl,mod,c,(Z)q,resg,&c1); c = c1;      chnremp(nvl,mod,c,(Z)q,resg,&c1); c = c1;
     STOQ(mod,t); mulq(q,(Q)t,&s); q = s;      STOZ(mod,t); mulq(q,(Q)t,&s); q = s;
   }    }
   *pr = c;    *pr = c;
 }  }
Line 627  void res_ch_det(VL vl,V v,P p1,P p2,P *pr)
Line 627  void res_ch_det(VL vl,V v,P p1,P p2,P *pr)
   norm1c(q1,&a); norm1c(q2,&b);    norm1c(q1,&a); norm1c(q2,&b);
   n = DEG(DC(q1)); m = DEG(DC(q2));    n = DEG(DC(q1)); m = DEG(DC(q2));
   pwrq(a,(Q)m,&w); pwrq(b,(Q)n,&s); mulq(w,s,&u);    pwrq(a,(Q)m,&w); pwrq(b,(Q)n,&s); mulq(w,s,&u);
   factorialz(QTOS(n)+QTOS(m),&t);    factorialz(ZTOS(n)+ZTOS(m),&t);
   mulq(u,(Q)t,&s); addq(s,s,&f);    mulq(u,(Q)t,&s); addq(s,s,&f);
   for ( index = 0, q = (Q)ONE, c = 0; cmpq(f,q) >= 0; ) {    for ( index = 0, q = (Q)ONE, c = 0; cmpq(f,q) >= 0; ) {
     mod = get_lprime(index++);      mod = get_lprime(index++);
Line 640  void res_ch_det(VL vl,V v,P p1,P p2,P *pr)
Line 640  void res_ch_det(VL vl,V v,P p1,P p2,P *pr)
     ptomp(mod,q1,&tg1); ptomp(mod,q2,&tg2);      ptomp(mod,q1,&tg1); ptomp(mod,q2,&tg2);
     res_detmp(nvl,mod,v,tg1,tg2,&resg);      res_detmp(nvl,mod,v,tg1,tg2,&resg);
     chnremp(nvl,mod,c,(Z)q,resg,&c1); c = c1;      chnremp(nvl,mod,c,(Z)q,resg,&c1); c = c1;
     STOQ(mod,t); mulq(q,(Q)t,&s); q = s;      STOZ(mod,t); mulq(q,(Q)t,&s); q = s;
   }    }
   *pr = c;    *pr = c;
 }  }
Line 657  void res_detmp(VL vl,int mod,V v,P p1,P p2,P *dp)
Line 657  void res_detmp(VL vl,int mod,V v,P p1,P p2,P *dp)
   n1 = UDEG(p1); n2 = UDEG(p2); n = n1+n2;    n1 = UDEG(p1); n2 = UDEG(p2); n = n1+n2;
   mat = (P **)almat_pointer(n,n);    mat = (P **)almat_pointer(n,n);
   for ( dc = DC(p1); dc; dc = NEXT(dc) )    for ( dc = DC(p1); dc; dc = NEXT(dc) )
     mat[0][n1-QTOS(DEG(dc))] = COEF(dc);      mat[0][n1-ZTOS(DEG(dc))] = COEF(dc);
   for ( i = 1; i < n2; i++ )    for ( i = 1; i < n2; i++ )
     for ( j = 0; j <= n1; j++ )      for ( j = 0; j <= n1; j++ )
       mat[i][i+j] = mat[0][j];        mat[i][i+j] = mat[0][j];
   for ( dc = DC(p2); dc; dc = NEXT(dc) )    for ( dc = DC(p2); dc; dc = NEXT(dc) )
     mat[n2][n2-QTOS(DEG(dc))] = COEF(dc);      mat[n2][n2-ZTOS(DEG(dc))] = COEF(dc);
   for ( i = 1; i < n1; i++ )    for ( i = 1; i < n1; i++ )
     for ( j = 0; j <= n2; j++ )      for ( j = 0; j <= n2; j++ )
       mat[i+n2][i+j] = mat[n2][j];        mat[i+n2][i+j] = mat[n2][j];
Line 739  void premp(VL vl,P p1,P p2,P *pr)
Line 739  void premp(VL vl,P p1,P p2,P *pr)
     bzero((char *)pw,(int)((n1+1)*sizeof(P)));      bzero((char *)pw,(int)((n1+1)*sizeof(P)));
   
     for ( dc = DC(p1); dc; dc = NEXT(dc) )      for ( dc = DC(p1); dc; dc = NEXT(dc) )
       pw[QTOS(DEG(dc))] = COEF(dc);        pw[ZTOS(DEG(dc))] = COEF(dc);
   
     for ( i = n1; i >= n2; i-- ) {      for ( i = n1; i >= n2; i-- ) {
       if ( pw[i] ) {        if ( pw[i] ) {
Line 750  void premp(VL vl,P p1,P p2,P *pr)
Line 750  void premp(VL vl,P p1,P p2,P *pr)
   
         for ( dc = DC(p2), d = i - n2; dc; dc = NEXT(dc) ) {          for ( dc = DC(p2), d = i - n2; dc; dc = NEXT(dc) ) {
           mulp(vl,COEF(dc),m,&m1);            mulp(vl,COEF(dc),m,&m1);
           subp(vl,pw[QTOS(DEG(dc))+d],m1,&m2);            subp(vl,pw[ZTOS(DEG(dc))+d],m1,&m2);
           pw[QTOS(DEG(dc))+d] = m2;            pw[ZTOS(DEG(dc))+d] = m2;
         }          }
       } else        } else
         for ( j = i; j >= 0; j-- )          for ( j = i; j >= 0; j-- )
Line 973  int getchomdeg(V v,P p)
Line 973  int getchomdeg(V v,P p)
     return ( dbound(v,p) );      return ( dbound(v,p) );
   else {    else {
     for ( dc = DC(p), m = 0; dc; dc = NEXT(dc) ) {      for ( dc = DC(p), m = 0; dc; dc = NEXT(dc) ) {
       m1 = getchomdeg(v,COEF(dc))+QTOS(DEG(dc));        m1 = getchomdeg(v,COEF(dc))+ZTOS(DEG(dc));
       m = MAX(m,m1);        m = MAX(m,m1);
     }      }
     return ( m );      return ( m );
Line 989  int getlchomdeg(V v,P p,int *d)
Line 989  int getlchomdeg(V v,P p,int *d)
     *d = 0;      *d = 0;
     return ( 0 );      return ( 0 );
   } else if ( VR(p) == v ) {    } else if ( VR(p) == v ) {
     *d = QTOS(DEG(DC(p)));      *d = ZTOS(DEG(DC(p)));
     return ( homdeg(LC(p)) );      return ( homdeg(LC(p)) );
   } else {    } else {
     for ( dc = DC(p), m0 = 0, d0 = 0; dc; dc = NEXT(dc) ) {      for ( dc = DC(p), m0 = 0, d0 = 0; dc; dc = NEXT(dc) ) {
       m1 = getlchomdeg(v,COEF(dc),&d1)+QTOS(DEG(dc));        m1 = getlchomdeg(v,COEF(dc),&d1)+ZTOS(DEG(dc));
       if ( d1 > d0 ) {        if ( d1 > d0 ) {
         m0 = m1;          m0 = m1;
         d0 = d1;          d0 = d1;

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

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