Karim Belabas on Thu, 27 Dec 2007 00:15:10 +0100


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

Re: "exponent (expo) overflow"


* Alessandro Languasco [2007-12-26 11:52]:
> I'm writing a GP script in which I have to compute a quite large
> power of a matrix. This is fine until I use the exponent L<=2^(23)
> but for larger L>=2^(24) I have a
> 
> *** for: exponent (expo) overflow
> 
> (which in fact is not too surprising; the exponent is quite large....).
> But I really need to use larger exponents.
> 
> Do you know if is it possible to solve this problem ?
> Maybe some default() instruction could be used in this situation,
> but I don't know if it is possible and how to do this.

The allowed range of exponents is hard-coded into the t_REAL representation:
BITS_IN_LONG - 2 bits are used to code the exponent, and one of them is a sign.

So the simplest solution to your problem is to use a 64bit machine for
your computation. (Assuming you won't need exponents larger than 2^61.)

Another possibility is to split your computation and renormalize your matrix 
(say divide it by 2^N for some suitable N) after each part of the
computation.

Another is to do the computation in a completely different way, but I'll
need more details ( is the matrix diagonalizable ? If not, perhaps a
suitable power of A^t A might suit you just as well ? )

Cheers,

    K.B.
-- 
Karim Belabas                  Tel: (+33) (0)5 40 00 26 17
IMB, 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]