John Cremona on Tue, 27 Jul 2010 04:17:37 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: precision issue


I'm travelling and will not be able to test this soon, but thanks anyway,

John

On 26 July 2010 20:05, Karim Belabas <Karim.Belabas@math.u-bordeaux1.fr> wrote:
> * John Cremona [2010-07-19 15:31]:
>> 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).
>
> I implemented what I think is the right algorithm (express in terms of
> Delta(2x)/Delta(x), use modularity for the two arguments x & 2x independently).
> Does it behave in a better way now ?
>
> Cheers,
>
>  K.B.
>
> P.S: I have modified all related routines (weber(), eta(), quadhilbert())
> in an analogous way.
>
>> 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-bordeaux.fr/~belabas/
> F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
> `
>