Michael Stoll on Mon, 20 Apr 1998 20:45:27 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
A new varaint for gtrunc on padics |
The following is a little bit cleaner (and more efficient in the case that we have a p-adic unit). Patch is with respect to the original pari-2.0.7.alpha source). (GN: Is this OK?) Michael lordly:/Users/micha/UnixProjects/pari/pari-2.0.7.alpha> diff -c2 src/basemath/gen3.c.orig src/basemath/gen3.c *** src/basemath/gen3.c.orig Sun Apr 19 15:33:15 1998 --- src/basemath/gen3.c Mon Apr 20 19:47:33 1998 *************** *** 1699,1703 **** gtrunc(GEN x) { ! long tx=typ(x),av,tetpil,i; GEN y; --- 1699,1703 ---- gtrunc(GEN x) { ! long tx=typ(x),av,tetpil,i,v; GEN y; *************** *** 1715,1720 **** case t_PADIC: if (!signe(x[4])) return gzero; ! av=avma; y=gpuigs((GEN)x[2],valp(x)); tetpil=avma; ! return gerepile(av,tetpil, mulii(y,(GEN)x[4])); case t_RFRAC: case t_RFRACN: --- 1715,1733 ---- case t_PADIC: if (!signe(x[4])) return gzero; ! v=valp(x); ! if (v==0) return (GEN)x[4]; /* simplest case */ ! if (v>0) ! { /* here, p^v is an integer, so we can use mulii */ ! av=avma; y=gpuigs((GEN)x[2],v); tetpil=avma; ! return gerepile(av,tetpil,mulii(y,(GEN)x[4])); ! } ! else ! { /* result is the fraction x[4]/p^(-v); ! should already be in lowest terms */ ! y=cgetg(3,t_FRAC); ! y[1]=lcopy((GEN)x[4]); ! y[2]=lpuigs((GEN)x[2],-v); ! return y; ! } case t_RFRAC: case t_RFRACN: