Karim Belabas on Mon, 19 Jul 2010 15:06:42 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: precision issue |
* 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] `