Karim Belabas on Sat, 10 May 2014 19:09:29 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Reducible thue() might be missing solutions |
* Georgi Guninski [2014-05-10 17:56]: > On Sat, May 10, 2014 at 05:09:21PM +0200, Karim Belabas wrote: > > * Karim Belabas [2014-05-10 16:20]: > > It required a combination of non-monic polynomials (this we had in abundance, > > e.g. from elltors testing), lots of rational roots compared to the degree > > (this we had also, but not in combination with the first point) and a little > > bad luck to exercise the bug... In fact it required a leading coefficient exactly equal to -1. > One man's bad luck is another man's good luck, > especially for bugs ;) > > What about 2.5.5, is it still supported? No. You should upgrade to either 2.7.* (new stable branch) or to master. master is preferred if you intend to go bug-hunting of course (that would be nice :-) 1) Here's a minimal fix for 2.7.* diff --git a/src/basemath/QX_factor.c b/src/basemath/QX_factor.c index 87190dc..2efb912 100644 --- a/src/basemath/QX_factor.c +++ b/src/basemath/QX_factor.c @@ -807,9 +807,9 @@ DDF_roots(GEN A) { lc = NULL; lcpol = A; } else { lc = absi(lc); lcpol = ZX_Z_mul(A, lc); } - Ap = ZX_to_Flx(A, pp); + Ap = Flx_normalize(ZX_to_Flx(A, pp), pp); bound = root_bound(A); - if (lc) { Ap = Flx_normalize(Ap, pp); bound = mulii(lc, bound); } + if (lc) bound = mulii(lc, bound); e = logint(addiu(shifti(bound, 1), 1), p, &pe); pes2 = shifti(pe, -1); if (DEBUGLEVEL>2) timer_printf(&T, "Root bound"); > (it caught some of the roots unlike master). 2) 2.5.5 is *not* affected by the bug in nfrootsQ() we're talking about, but it contains a few genuine bugs in thue() itself. Here's a minimal fix *for the problem you originally reported* for 2.5.5 (there were a few other problems in 2.5.5:thue() : it doesn't support non-monic polynomials, the final checks are much slower, and it leaked "user variables") diff --git a/src/modules/thue.c b/src/modules/thue.c index 46176c9..a9ede7b 100644 --- a/src/modules/thue.c +++ b/src/modules/thue.c @@ -1103,7 +1103,7 @@ thue(GEN tnf, GEN rhs, GEN ne) ry = nfrootsQ(Rab); for (k = 1; k < lg(ry); k++) if (typ(gel(ry,k)) == t_INT) check_y(&S, P, POL, gel(ry,k), rhs); - if (!odd(e)) { + if (odd(e)) { Rab = gsubst(gsubst(R, va, negi(df)), vb, negi(dg)); ry = nfrootsQ(Rab); for (k = 1; k < lg(ry); k++) Cheers, K.B. -- 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] `