=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/algnum.c,v retrieving revision 1.12 retrieving revision 1.14 diff -u -p -r1.12 -r1.14 --- OpenXM_contrib2/asir2000/builtin/algnum.c 2005/08/02 07:16:41 1.12 +++ OpenXM_contrib2/asir2000/builtin/algnum.c 2013/11/17 17:34:59 1.14 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/algnum.c,v 1.11 2005/07/11 00:24:02 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/algnum.c,v 1.13 2007/02/15 02:06:20 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -146,12 +146,28 @@ void Pdalgtodp(NODE arg,LIST *r) void Pdptodalg(NODE arg,DAlg *r) { - DP d; + DP d,nm,nm1; + MP m; + Q c,a; DAlg t; - + d = (DP)ARG0(arg); - MKDAlg(d,ONE,t); - simpdalg(t,r); + if ( !d ) *r = 0; + else { + for ( m = BDY(d); m; m = NEXT(m) ) + if ( !INT((Q)m->c) ) break; + if ( !m ) { + MKDAlg(d,(Q)ONE,t); + } else { + dp_ptozp(d,&nm); + divq((Q)BDY(d)->c,(Q)BDY(nm)->c,&c); + NTOQ(NM(c),SGN(c),a); + muldc(CO,nm,(P)a,&nm1); + NTOQ(DN(c),1,a); + MKDAlg(nm1,a,t); + } + simpdalg(t,r); + } } void Pdalgtoup(NODE arg,LIST *r) @@ -203,7 +219,7 @@ void Pinv_or_split_dalg(NODE arg,Obj *rp) { NODE gen,t,nd0,nd; LIST list; - int l,i,j,k,n; + int l,i,j,n; DP *ps,*ps1,*psw; NumberField nf; DAlg inv; @@ -239,7 +255,7 @@ void Pinv_or_split_dalg(NODE arg,Obj *rp) for ( ; i >= 0; i-- ) { NEXTNODE(nd0,nd); BDY(nd) = (pointer)psw[i]; } - for ( ; t; t = NEXT(t), k++ ) { + for ( ; t; t = NEXT(t) ) { NEXTNODE(nd0,nd); BDY(nd) = BDY(t); } NEXT(nd) = 0;