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

Annotation of OpenXM_contrib2/asir2018/engine/polydiv.c, Revision 1.1

1.1     ! noro        1: #ifdef MODULAR
        !             2: void divsrmp(VL vl,int mod,P p1,P p2,P *q,P *r)
        !             3: #else
        !             4: void divsrp(VL vl,P p1,P p2,P *q,P *r)
        !             5: #endif
        !             6: {
        !             7:   register int i,j;
        !             8:   register DCP dc1,dc2,dc;
        !             9:   P m,s,dvr;
        !            10:   P *pq,*pr,*pd;
        !            11:   V v1,v2;
        !            12:   Z deg1,deg2;
        !            13:   int d1,d2,sgn;
        !            14:
        !            15:   if ( !p1 ) {
        !            16:     *q = 0; *r = 0;
        !            17:   } else if ( NUM(p2) )
        !            18:     if ( NUM(p1) ) {
        !            19:       DIVNUM(p1,p2,q); *r = 0;
        !            20:     } else {
        !            21:       DIVSDCP(vl,p1,p2,q); *r = 0;
        !            22:     }
        !            23:   else if ( NUM(p1) ) {
        !            24:     *q = 0; *r = p1;
        !            25:   } else if ( ( v1 = VR(p1) ) == ( v2 = VR(p2) ) ) {
        !            26:     dc1 = DC(p1); dc2 = DC(p2);
        !            27:     deg1 = DEG(dc1); deg2 = DEG(dc2);
        !            28:     sgn = cmpz(deg1,deg2);
        !            29:     if ( sgn == 0 ) {
        !            30:       DIVSP(vl,COEF(dc1),COEF(dc2),q);
        !            31:       MULP(vl,p2,*q,&m); SUBP(vl,p1,m,r);
        !            32:     } else if ( sgn < 0 ) {
        !            33:       *q = 0; *r = p1;
        !            34:     } else {
        !            35:       if ( !smallz(deg1)  )
        !            36:         error("divsrp : invalid input");
        !            37:       d1 = QTOS(deg1); d2 = QTOS(deg2);
        !            38:       W_CALLOC(d1-d2,P,pq); W_CALLOC(d1,P,pr); W_CALLOC(d2,P,pd);
        !            39:       for ( dc = dc1; dc; dc = NEXT(dc) )
        !            40:         pr[QTOS(DEG(dc))] = COEF(dc);
        !            41:       for ( dc = dc2; dc; dc = NEXT(dc) )
        !            42:         pd[QTOS(DEG(dc))] = COEF(dc);
        !            43:       for ( dvr = COEF(dc2), i = d1 - d2; i >= 0; i-- ) {
        !            44:         if ( !pr[i+d2] )
        !            45:           continue;
        !            46:         DIVSP(vl,pr[i+d2],dvr,&pq[i]);
        !            47:         for ( j = d2; j >= 0; j-- ) {
        !            48:           MULP(vl,pq[i],pd[j],&m);
        !            49:           SUBP(vl,pr[i + j],m,&s); pr[i + j] = s;
        !            50:         }
        !            51:       }
        !            52:       plisttop(pq,v1,d1 - d2,q); plisttop(pr,v1,d1 - 1,r);
        !            53:     }
        !            54:   } else {
        !            55:     for ( ; (v1 != vl->v) && (v2 != vl->v); vl = NEXT(vl) );
        !            56:     if ( v2 == vl->v ) {
        !            57:       *q = 0; *r = p1;
        !            58:     } else
        !            59:       DIVSRDCP(vl,p1,p2,q,r);
        !            60:   }
        !            61: }
        !            62:
        !            63: #ifdef MODULAR
        !            64: void divsrdcmp(VL vl,int mod,P p1,P p2,P *q,P *r)
        !            65: #else
        !            66: void divsrdcp(VL vl,P p1,P p2,P *q,P *r)
        !            67: #endif
        !            68: {
        !            69:
        !            70:   P qc,rc;
        !            71:   DCP dc,dcq,dcq0,dcr,dcr0;
        !            72:
        !            73:   for ( dc = DC(p1), dcq0 = 0, dcr0 = 0; dc; dc = NEXT(dc) ) {
        !            74:     DIVSRP(vl,COEF(dc),p2,&qc,&rc);
        !            75:     if ( qc ) {
        !            76:       NEXTDC(dcq0,dcq); DEG(dcq) = DEG(dc); COEF(dcq) = qc;
        !            77:     }
        !            78:     if ( rc ) {
        !            79:       NEXTDC(dcr0,dcr); DEG(dcr) = DEG(dc); COEF(dcr) = rc;
        !            80:     }
        !            81:   }
        !            82:   if ( dcq0 ) {
        !            83:     NEXT(dcq) = 0; MKP(VR(p1),dcq0,*q);
        !            84:   } else
        !            85:     *q = 0;
        !            86:   if ( dcr0 ) {
        !            87:     NEXT(dcr) = 0; MKP(VR(p1),dcr0,*r);
        !            88:   } else
        !            89:     *r = 0;
        !            90: }
        !            91:
        !            92: #ifdef MODULAR
        !            93: void divsmp(VL vl,int mod,P p1,P p2,P *q)
        !            94: #else
        !            95: void divsp(VL vl,P p1,P p2,P *q)
        !            96: #endif
        !            97: {
        !            98:   P t;
        !            99:
        !           100:   DIVSRP(vl,p1,p2,q,&t);
        !           101:   if ( t )
        !           102:     error("divsp: cannot happen");
        !           103: }
        !           104:
        !           105: #ifdef MODULAR
        !           106: void divsdcmp(VL vl,int mod,P p1,P p2,P *q)
        !           107: #else
        !           108: void divsdcp(VL vl,P p1,P p2,P *q)
        !           109: #endif
        !           110: {
        !           111:
        !           112:   P m;
        !           113:   register DCP dc,dcr,dcr0;
        !           114:
        !           115:   for ( dc = DC(p1), dcr0 = 0; dc; dc = NEXT(dc) ) {
        !           116:     DIVSP(vl,COEF(dc),p2,&m);
        !           117:     NEXTDC(dcr0,dcr); DEG(dcr) = DEG(dc); COEF(dcr) = m; NEXT(dcr) = 0;
        !           118:   }
        !           119:   MKP(VR(p1),dcr0,*q);
        !           120: }
        !           121:

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