Karim Belabas on Sat, 15 Sep 2001 10:37:21 +0000 (GMT)

 Re: truncation

```On Wed, 1 Aug 2001, Mark Chimley wrote:
> I have been using simplify (ground (x)) to convert x (a polynomial with
> complex coefficients) into one with integer coefficients. The polynomial
> is an approximation to a class equation of an imaginary quadratic field,
> so is known to reside in Z[X]. The problem is, when the coefficients
> become suitably large, I get the error, "precision loss in truncation".
> I have tried using precision (x, n) to increase the number of decimal
> places in x prior to rounding, and although this seemed to overcome the
> error, simplify (x) did not give a polynomial with integer coefficients.
>
> I think an example might be appropriate to explain the problem better,
> so I shall log some output. In the meantime, I shall post this message
> to see if there is anything obvious that I am doing wrong, and to ask
> exactly what "precision loss in truncation" means.

You are trying to take the integral part (as a subroutine of round()) of a
real number whose number of significant digits is too low for the operation
to make sense, e.g round(1e30) at \p28 : 1e30 represents any real number x
such that |x - 10^30| < 2^(99 - 3*32) = 8 [assuming 32bit machine;
internally, we have significant bits, not digits: 1e30 has exponent 99 and
\p28 translates to 3 significant words].  There is no unique integer with
that property, hence the error message.

What you need to do is to increase the precision of your data _before_
starting the computation, e.g. increase 'realprecision' before computing your
transcendental functions. Using 'precision' to increase the internal
precision of an object is a hack that inserts essentially random significant
digits.

Hope this helps,

Karim.

--
Karim Belabas                    email: Karim.Belabas@math.u-psud.fr
Dep. de Mathematiques, Bat. 425
Universite Paris-Sud             Tel: (00 33) 1 69 15 57 48
F-91405 Orsay (France)           Fax: (00 33) 1 69 15 60 19
--