What is the minimum precision allowed for floats.
Paul Zimmermann
Paul.Zimmermann at loria.fr
Mon Sep 29 15:33:28 CEST 2008
> Date: Sun, 28 Sep 2008 22:47:50 +0200
> From: "Joel Kronander" <joekr552 at student.liu.se>
>
> Hi
>
> I have a question regading the possible minimun precision for floats.
> For example is it possible to use a precision between native c float and
> double
> ie precision digits between 6-15 for exmample.
>
>
> /best regards Joel Kronander
I guess your question is related to the mpf class. The manual says:
The precision selected for a variable is a minimum value, GMP may
increase it a little to facilitate efficient calculation. Currently
this means rounding up to a whole limb, and then sometimes having a
further partial limb, depending on the high limb of the mantissa. But
applications shouldn't be concerned by such details.
If you look in the internal file gmp-impl.h you will see:
/* __GMPF_BITS_TO_PREC applies a minimum 53 bits, rounds upwards to a whole
limb and adds an extra limb. __GMPF_PREC_TO_BITS drops that extra limb,
hence giving back the user's size in bits rounded up. Notice that
converting prec->bits->prec gives an unchanged value. */
#define __GMPF_BITS_TO_PREC(n) \
((mp_size_t) ((__GMP_MAX (53, n) + 2 * GMP_NUMB_BITS - 1) / GMP_NUMB_BITS))
thus you *can* ask for a precision of 6 or 15 bits, but then GMP will allocate
3 words on a 32-bit computer, and 2 words on a 64-bit computer, and it will
have the same effect as if you had asked for 53 or 64 bits.
If you want to have a precision of *exactly* 6 bits, I suggest you try MPFR
(see mpfr.org). It also works for 15 bits.
Paul Zimmermann
More information about the gmp-discuss
mailing list