gmp 4.1 documentation improvement suggestions

Kevin Ryde user42@zip.com.au
Mon, 09 Dec 2002 10:47:08 +1000


Serge Winitzki <serge@cosmos.phy.tufts.edu> writes:
>
> I decided to use mpz_get_d_2exp instead of mpz_sizeinbase because there
> wasn't an mpf_sizeinbase and because it seemed that mpz_sizeinbase is
> not as efficient since needs to give me the size in any base, not just
> in base 2. Maybe I'm wrong and mpz_sizeinbase is optimized for base 2;  

Yes, it recognises power-of-2 bases and gives an exact answer quickly.

> Another issue I wanted to mention is related to precision control in
> calculations. Suppose we are using functions such as mpf_add(x,x,y);  
> by default the target precision is taken from the first argument "x", so
> "x+y" is evaluated to the same precision as "x". However there are
> situations when the precision of "x" is lower than the precision of the
> result, for example, if x=0.001 (one significant bit) and y=1.000 (four
> significant bits). It is not obvious to a beginner GMP user that this
> situation will sometimes arise and lead to a loss of precision.

Well, gmp has no way to know the actual error range of a particular
value you store in an mpf_t.  That range is no doubt a function of the
calculation thus far performed, and perhaps of the original inputs.

> I've been using GMP 4.0.1 and just found out that GMP 4.1 has a new mpfr
> facility that incorporates precision tracking.

See also www.mpfr.org.

> However, I couldn't find
> documentation about how the precision tracking is done, and reading the
> source code is too time-consuming for me.

It still doesn't track anything, but it does give guarantees about
rounding of results.

> I just finished drafting my
> own simple precision tracking implementation for our Yacas project,
> without looking at mpfr or at another implementation, and it would be
> interesting to understand how it works in mpfr. Are there any documents
> or papers that describe it?

You might be heading towards interval arithmetic.  The mpfr web page
has some links on that, and some preliminary code using mpfr to do it.