| Karim Belabas on Thu, 14 Nov 2013 18:10:26 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: factorpadic() for non-squarefree polynomials |
* Jeroen Demeyer [2013-11-14 13:30]:
> The documentation for ??factorpadic states that the discriminant of
> the polynomial much have p-adic valuation less than r. While I
> understand where the condition comes from, does that mean that the
> following is undefined behaviour:
>
> gp> factorpadic(t^2, 3, 5)
> %13 =
> [(1 + O(3^5))*t + O(3^5) 2]
>
> Indeed, the following example should be equivalent but it's not:
>
> gp> factorpadic(t^2 + 3^5, 3, 5)
> %14 =
> [(1 + O(3^5))*t^2 + O(3^5)*t + O(3^0) 1]
>
> In any case, I think this important condition should be added to the
> short help ?factorpadic.
Sorry for the third message in a row. The following patch fixes the
immediate bug in Z_to_Zp(). Now, we have
(18:02) gp > factorpadic(t^2 + 3^5, 3, 5)
%1 =
[(1 + O(3^5))*t^2 + O(3^5)*t + O(3^5) 1]
As to switching from absolute to relative accuracy, it would require further
checks. I'll leave the behaviour as it stands and fix the (unprecise
and misleading) documentation.
Cheers,
K.B.
diff --git a/src/basemath/polarit1.c b/src/basemath/polarit1.c
index 2b451bf..2c7ac40 100644
--- a/src/basemath/polarit1.c
+++ b/src/basemath/polarit1.c
@@ -178,7 +178,8 @@ Z_to_Zp(GEN x, GEN p, GEN pr, long r)
if (!sx) return zeropadic_shallow(p,r);
v = Z_pvalrem(x,p,&x);
if (v) {
- r -= v; if (r <= 0) return zeropadic_shallow(p,r);
+ if (r <= v) return zeropadic_shallow(p,r);
+ r -= v;
pr = powiu(p,r);
}
y = cgetg(5,t_PADIC);
--
Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation http://www.math.u-bordeaux1.fr/~kbelabas/
F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP]
`