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

Diff for /OpenXM_contrib2/asir2018/engine/dalg.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 1 
Line 1 
 /*  /*
  * $OpenXM$   * $OpenXM: OpenXM_contrib2/asir2018/engine/dalg.c,v 1.1 2018/09/19 05:45:07 noro Exp $
 */  */
   
 #include "ca.h"  #include "ca.h"
Line 46  void setfield_dalg(NODE alist)
Line 46  void setfield_dalg(NODE alist)
   nf->defpoly = defpoly = (P *)MALLOC(n*sizeof(P));    nf->defpoly = defpoly = (P *)MALLOC(n*sizeof(P));
   nf->ps = ps = (DP *)MALLOC(n*sizeof(DP));    nf->ps = ps = (DP *)MALLOC(n*sizeof(DP));
   current_spec = dp_current_spec;    current_spec = dp_current_spec;
   STOQ(2,two);    STOZ(2,two);
   create_order_spec(0,(Obj)two,&nf->spec);    create_order_spec(0,(Obj)two,&nf->spec);
   initd(nf->spec);    initd(nf->spec);
   for ( b = hlist = 0, i = 0, vl1 = vl; i < n; vl1 = NEXT(vl1), i++ ) {    for ( b = hlist = 0, i = 0, vl1 = vl; i < n; vl1 = NEXT(vl1), i++ ) {
     ptozp(vl1->v->attr,1,&c,&defpoly[i]);      ptozp(vl1->v->attr,1,&c,&defpoly[i]);
     ptod(ALG,vl,defpoly[i],&ps[i]);      ptod(ALG,vl,defpoly[i],&ps[i]);
     STOQ(i,iq); MKNODE(b1,(pointer)iq,b); b = b1;      STOZ(i,iq); MKNODE(b1,(pointer)iq,b); b = b1;
     MKNODE(b2,(pointer)ps[i],hlist); hlist = b2;      MKNODE(b2,(pointer)ps[i],hlist); hlist = b2;
   }    }
   ptod(ALG,vl,(P)ONE,&one);    ptod(ALG,vl,(P)ONE,&one);
Line 95  void setfield_gb(NODE gb,VL vl,struct order_spec *spec
Line 95  void setfield_gb(NODE gb,VL vl,struct order_spec *spec
   for ( b = hlist = 0, i = 0, t = gb; i < nf->psn; t = NEXT(t), i++ ) {    for ( b = hlist = 0, i = 0, t = gb; i < nf->psn; t = NEXT(t), i++ ) {
     ptozp((P)BDY(t),1,&c,&defpoly[i]);      ptozp((P)BDY(t),1,&c,&defpoly[i]);
     ptod(CO,vl,defpoly[i],&ps[i]);      ptod(CO,vl,defpoly[i],&ps[i]);
     STOQ(i,iq); MKNODE(b1,(pointer)iq,b); b = b1;      STOZ(i,iq); MKNODE(b1,(pointer)iq,b); b = b1;
     MKNODE(b2,(pointer)ps[i],hlist); hlist = b2;      MKNODE(b2,(pointer)ps[i],hlist); hlist = b2;
   }    }
   ptod(ALG,vl,(P)ONE,&one);    ptod(ALG,vl,(P)ONE,&one);
Line 434  void adddalg(DAlg a,DAlg b,DAlg *c)
Line 434  void adddalg(DAlg a,DAlg b,DAlg *c)
     dna = a->dn;      dna = a->dn;
     dnb = b->dn;      dnb = b->dn;
     gcdz(dna,dnb,&gn);      gcdz(dna,dnb,&gn);
     divz(dna,gn,&a1); divz(dnb,gn,&b1);      divsz(dna,gn,&a1); divsz(dnb,gn,&b1);
     /* nma/dna+nmb/dnb = (nma*b1+nmb*a1)/(dna*b1) */      /* nma/dna+nmb/dnb = (nma*b1+nmb*a1)/(dna*b1) */
     muldc(CO,a->nm,(Obj)b1,&ta); muldc(CO,b->nm,(Obj)a1,&tb);      muldc(CO,a->nm,(Obj)b1,&ta); muldc(CO,b->nm,(Obj)a1,&tb);
     current_spec = dp_current_spec; initd(nf->spec);      current_spec = dp_current_spec; initd(nf->spec);
Line 468  void subdalg(DAlg a,DAlg b,DAlg *c)
Line 468  void subdalg(DAlg a,DAlg b,DAlg *c)
     dna = a->dn;      dna = a->dn;
     dnb = b->dn;      dnb = b->dn;
     gcdz(dna,dnb,&gn);      gcdz(dna,dnb,&gn);
     divz(dna,gn,&a1); divz(dnb,gn,&b1);      divsz(dna,gn,&a1); divsz(dnb,gn,&b1);
     /* nma/dna-nmb/dnb = (nma*b1-nmb*a1)/(dna*b1) */      /* nma/dna-nmb/dnb = (nma*b1-nmb*a1)/(dna*b1) */
     muldc(CO,a->nm,(Obj)b1,&ta); muldc(CO,b->nm,(Obj)a1,&tb);      muldc(CO,a->nm,(Obj)b1,&ta); muldc(CO,b->nm,(Obj)a1,&tb);
     current_spec = dp_current_spec; initd(nf->spec);      current_spec = dp_current_spec; initd(nf->spec);
Line 537  void rmcontdalg(DAlg a, DAlg *r)
Line 537  void rmcontdalg(DAlg a, DAlg *r)
     *r = a;      *r = a;
   else {    else {
     dp_ptozp(a->nm,&u);      dp_ptozp(a->nm,&u);
     divz((Z)BDY(a->nm)->c,(Z)BDY(u)->c,&cont);      divsz((Z)BDY(a->nm)->c,(Z)BDY(u)->c,&cont);
     gcdz(cont,a->dn,&gn);      gcdz(cont,a->dn,&gn);
     divsz(cont,gn,&c);      divsz(cont,gn,&c);
     divsz(a->dn,gn,&d);      divsz(a->dn,gn,&d);
Line 596  int invdalg(DAlg a,DAlg *c)
Line 596  int invdalg(DAlg a,DAlg *c)
       MKDAlg(m,ONE,t);        MKDAlg(m,ONE,t);
       muldalg(t,a0,&simp[i]);        muldalg(t,a0,&simp[i]);
     }      }
     gcdz(simp[i]->dn,ln,&gn); divz(ln,gn,&qn);      gcdz(simp[i]->dn,ln,&gn); divsz(ln,gn,&qn);
     mulz(simp[i]->dn,qn,&ln);      mulz(simp[i]->dn,qn,&ln);
   }    }
   initd(current_spec);    initd(current_spec);
Line 667  NODE inv_or_split_dalg(DAlg a,DAlg *c)
Line 667  NODE inv_or_split_dalg(DAlg a,DAlg *c)
   mb = nf->mb;    mb = nf->mb;
   n = nf->n;    n = nf->n;
   ln = ONE;    ln = ONE;
   dp_ptozp(a->nm,&u); divz((Z)BDY(a->nm)->c,(Z)BDY(u)->c,&nmc);    dp_ptozp(a->nm,&u); divsz((Z)BDY(a->nm)->c,(Z)BDY(u)->c,&nmc);
   MKDAlg(u,ONE,a0);    MKDAlg(u,ONE,a0);
   simp = (DAlg *)MALLOC(dim*sizeof(DAlg));    simp = (DAlg *)MALLOC(dim*sizeof(DAlg));
   current_spec = dp_current_spec; initd(nf->spec);    current_spec = dp_current_spec; initd(nf->spec);
Line 690  NODE inv_or_split_dalg(DAlg a,DAlg *c)
Line 690  NODE inv_or_split_dalg(DAlg a,DAlg *c)
       muldalg(t,a0,&simp[i]);        muldalg(t,a0,&simp[i]);
     }      }
     if ( simp[i] ) {      if ( simp[i] ) {
       gcdz(simp[i]->dn,ln,&gn); divz(ln,gn,&qn);        gcdz(simp[i]->dn,ln,&gn); divsz(ln,gn,&qn);
       mulz(simp[i]->dn,qn,&ln);        mulz(simp[i]->dn,qn,&ln);
     }      }
   }    }
Line 783  NODE dp_inv_or_split(NODE gb,DP f,struct order_spec *s
Line 783  NODE dp_inv_or_split(NODE gb,DP f,struct order_spec *s
   for ( ind = 0, i = 0, t = gb; i < n; i++, t = NEXT(t) ) {    for ( ind = 0, i = 0, t = gb; i < n; i++, t = NEXT(t) ) {
     ps[i] = (DP)BDY(t);      ps[i] = (DP)BDY(t);
     NEXTNODE(ind,indt);      NEXTNODE(ind,indt);
     STOQ(i,iq); BDY(indt) = iq;      STOZ(i,iq); BDY(indt) = iq;
   }    }
   if ( ind ) NEXT(indt) = 0;    if ( ind ) NEXT(indt) = 0;
   dp_true_nf(ind,f,ps,1,&nm,(P *)&dn);    dp_true_nf(ind,f,ps,1,&nm,(P *)&dn);
Line 818  NODE dp_inv_or_split(NODE gb,DP f,struct order_spec *s
Line 818  NODE dp_inv_or_split(NODE gb,DP f,struct order_spec *s
       MKDAlg(nm,dn,simp[i]);        MKDAlg(nm,dn,simp[i]);
     }      }
     if ( simp[i] ) {      if ( simp[i] ) {
       gcdz(simp[i]->dn,ln,&gn); divz(ln,gn,&qn);        gcdz(simp[i]->dn,ln,&gn); divsz(ln,gn,&qn);
       mulz(simp[i]->dn,qn,&ln);        mulz(simp[i]->dn,qn,&ln);
     }      }
   }    }
Line 922  void pwrdalg(DAlg a,Z e,DAlg *c)
Line 922  void pwrdalg(DAlg a,Z e,DAlg *c)
     absz(e,&en);      absz(e,&en);
     y = nf->one;      y = nf->one;
     z = a;      z = a;
     STOQ(2,two);      STOZ(2,two);
     while ( 1 ) {      while ( 1 ) {
       divqrz(en,two,&qn,&rn); en = qn;        divqrz(en,two,&qn,&rn); en = qn;
       if ( rn ) {        if ( rn ) {
Line 976  int dalgtoup(DAlg da,P *up,Z *dn)
Line 976  int dalgtoup(DAlg da,P *up,Z *dn)
     d->td = t->dl->td - t->dl->d[hi];      d->td = t->dl->td - t->dl->d[hi];
     if ( t->dl->d[hi] != current_d ) {      if ( t->dl->d[hi] != current_d ) {
       NEXT(mp) = 0; MKDP(nv,mp0,c); MKDAlg(c,ONE,cc);        NEXT(mp) = 0; MKDP(nv,mp0,c); MKDAlg(c,ONE,cc);
       NEXTDC(dc0,dc); STOQ(current_d,DEG(dc)); COEF(dc) = (P)cc;        NEXTDC(dc0,dc); STOZ(current_d,DEG(dc)); COEF(dc) = (P)cc;
       current_d = t->dl->d[hi];        current_d = t->dl->d[hi];
       mp0 = 0;        mp0 = 0;
     }      }
Line 984  int dalgtoup(DAlg da,P *up,Z *dn)
Line 984  int dalgtoup(DAlg da,P *up,Z *dn)
     mp->c = t->c; mp->dl = d;      mp->c = t->c; mp->dl = d;
   }    }
   NEXT(mp) = 0; MKDP(nv,mp0,c); MKDAlg(c,ONE,cc);    NEXT(mp) = 0; MKDP(nv,mp0,c); MKDAlg(c,ONE,cc);
   NEXTDC(dc0,dc); STOQ(current_d,DEG(dc)); COEF(dc) = (P)cc;    NEXTDC(dc0,dc); STOZ(current_d,DEG(dc)); COEF(dc) = (P)cc;
   NEXT(dc) = 0;    NEXT(dc) = 0;
   makevar("x",&v);    makevar("x",&v);
   MKP(VR(v),dc0,*up);    MKP(VR(v),dc0,*up);

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

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