| Karim BELABAS on Sun, 13 Oct 2002 18:29:18 +0200 (MEST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: bug in addrr |
On Sat, 12 Oct 2002, Ilya Zakharevich wrote:
> On Tue, Oct 01, 2002 at 05:05:27PM +0200, Karim BELABAS wrote:
> > 3) switching to base 2^BITS_IN_LONG exponents would enable us to reuse the
> > integer multiplication code for floating point operations [ currently, they
> > are disjoint sets of routines ]. In particular fast multiplication would be
> > enabled at last for t_REALs.
>
> Note one shortcoming of this scheme: currently, to convert a
> float/double etc. to a t_REAL without a loss of precision, one can
> calculate in advance how many words one needs. With this change one
> needs to inspect the exponent first. This may introduce many subtle bugs...
Hadn't thought of that.
Currently dbltor(x) has length DEFAULTPREC, unless x is 0. (length 2),
which means 64 bits of precision (while the input had only 53). For most
values of the exponent (only 12 residue classes modulo BITS_IN_LONG are taken
care of by the extra 11 bits), it will be necessary to add an extra word.
So dbltor(x) would have length 2, DEFAULTPREC, or DEFAULTPREC+1, depending on
the operand. The only serious problem I can see
with this is things like
x = dbltor(f); ...; affrr(y, x)
But this kind of code is broken anyway [if f = 0...]. It's much better to use
x = dbltor(f); ... ;
z = cgetr(DEFAULTPREC);
affrr(y, z);
[ possibly doing computations with one _more_ word of precision than was
intended is not a serious problem. One word _less_ would be more annoying. ]
Karim.
--
Karim Belabas Tel: (+33) (0)1 69 15 57 48
Dép. de Mathematiques, Bat. 425 Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France) http://www.math.u-psud.fr/~belabas/
--
PARI/GP Home Page: http://www.parigp-home.de/