| Karim BELABAS on Fri, 19 Mar 1999 18:14:57 +0100 (MET) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: quadray() bug |
[Igor:]
> looks like this function is new and haven't been thoroughly tested:
>
> ? nfdisc(x^2-x-50)
> 201
> ? quadray(201,idealprimedec(nfinit(x^2-x-50),5))
> *** incorrect archimedean component in zidealstarinit.
Bad input. Output of idealprimedec is a vector of two prime ideals,
which is thought to be an idele at first (vector of two elements, the first
being a prime ideal, the second being the "archimedean component").
The archimedean component is then analyzed more thouroughly raising an error.
> ? quadray(201,5)
> *** bus error: bug in GP (please report).
>
> ? quadray(13,5)
> *** not an integer argument in an arithmetic function
Patch following.
> Also, manual says that the second argument of quadray() is a
> conductor f. I think it's also useful to mention, of what shape
> the conductor can assume (a prime, a 5-component vector representing a
> prime ideal, etc. )
It's (what PARI calls) an "idele", see ?? bnr (I'm adding "ideal" and "idele"
to the keywords recognized by the online help...)
Karim.
*** src/basemath/base3.c.orig Wed Mar 17 09:03:14 1999
--- src/basemath/base3.c Fri Mar 19 18:07:11 1999
***************
*** 1036,1045 ****
p1 = addsi(-1, gpowgs(p,f));
if (isnfscalar(x))
{
if (gcmp1(x) || egalii((GEN)pr[1], gdeux)) { avma = av; return gzero; }
! if (egalii((GEN)x[1], p1)) return gerepileuptoint(av,shifti(p1,-1));
! v = gpowgs(p,f-1); g0 = element_powmodpr(nf,g0,v,prhall);
! return gerepileuptoint(av, mulii(v, Fp_shanks((GEN)x[1],(GEN)g0[1],p)));
}
p1 = racine(p1);
if (cmpis(p1,LGBITS) >= 0) err(talker,"module too large in nfshanks");
--- 1036,1047 ----
p1 = addsi(-1, gpowgs(p,f));
if (isnfscalar(x))
{
+ x = (GEN)x[1];
if (gcmp1(x) || egalii((GEN)pr[1], gdeux)) { avma = av; return gzero; }
! if (egalii(x, p1)) return gerepileuptoint(av,shifti(p1,-1));
! v = divii(p1, addsi(-1,p));
! g0 = lift_intern((GEN)element_powmodpr(nf,g0,v,prhall)[1]);
! return gerepileuptoint(av, mulii(v, Fp_shanks(x,g0,p)));
}
p1 = racine(p1);
if (cmpis(p1,LGBITS) >= 0) err(talker,"module too large in nfshanks");
(18:09)(*1) orkay-karim > odiff src/basemath/base4.c.orig
*** src/basemath/base4.c.orig Fri Mar 5 08:51:38 1999
--- src/basemath/base4.c Fri Mar 19 17:51:40 1999
***************
*** 104,109 ****
--- 104,110 ----
prime_to_ideal(GEN nf, GEN vp)
{
long av=avma;
+ if (typ(vp) == t_INT) return gscalmat(vp, lgef(nf[1])-3);
return gerepileupto(av, prime_to_ideal_aux(nf,vp));
}
--
Karim Belabas email: Karim.Belabas@math.u-psud.fr
Dep. de Mathematiques, Bat. 425
Universite Paris-Sud Tel: (00 33) 1 69 15 57 48
F-91405 Orsay (France) Fax: (00 33) 1 69 15 60 19
--
PARI/GP Home Page: http://hasse.mathematik.tu-muenchen.de/ntsw/pari/