John Cremona on Mon, 19 Jul 2010 15:30:08 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: precision issue |
Thanks, Karim (and also Charles Greathouse who replied off-list for some reason). OK, so I did not recognise 2^63-1 and read the wrong version of the manual, sorry. On the main point -- it would be very good to have this done well. I am using it to compute some Hilbert class polynomials (and yes, I know there are many other methods). John On 19 July 2010 14:01, Karim Belabas <Karim.Belabas@math.u-bordeaux1.fr> wrote: > * John Cremona [2010-07-19 14:35]: >> Consider the following (using a recent svn on a 64-bit machine): >> >> ? D = -37*4 >> %1 = -148 >> ? tau = (2+sqrt(D))/4 >> %2 = 1/2 + 3.0413812651491098444998421226010335310*I >> ? ellj(tau) >> %3 = -199147904.00096667436353951991474362130 + 4.733165431326070833 E-30*I >> ? real(ellj(tau)) >> %4 = -199147904.00096667436353951991474362130 >> ? precision(real(ellj(tau))) >> %5 = 38 >> ? precision(imag(ellj(tau))) >> %6 = 19 >> ? real(tau) >> %7 = 1/2 >> ? precision(real(tau)) >> %8 = 9223372036854775807 >> ? precision(imag(tau)) >> %9 = 38 >> >> I don't like the way that j(tau)'s imaginary part only has half the >> precision of the real part. Since tau is known to have real part >> *exactly* 1/2 we know that j(tau) is real, so could we not set the >> imaginary par of the returned value to exact 0? (similarly when >> Re(tau)=0). This must be quite a common special case. > > 1) Trying to answer your question, I just had a look at the code, and it > must be rewritten anyway. (Correct algorithm in terms of \eta(tau), > implemented in a highly inefficient way.) > > 2) This is analogous to > > (14:44) precision((1.+1e-30) - 1.) > %2 = 19 > > > I'll see what I can do. > > Cheers, > > K.B. > > P.S: >> And secondly, why that bizarre value for precision(real(tau))? I even get >> >> ? precision(0) >> %12 = 9223372036854775807 >> >> while looks like a bug since I thought that exact objects had precision 0. > > The documented behaviour is : > > (14:38) gp > ??precision > precision(x,{n}): > > gives the precision in decimal digits of the PARI object x. If x is an exact > object, the largest single precision integer is returned. > > > -- > 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/~belabas/ > F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP] > ` >