Previous: Custom Interface, Up: MPFR Interface
The following types and
functions were mainly designed for the implementation of mpfr
,
but may be useful for users too.
However no upward compatibility is guaranteed.
You may need to include mpfr-impl.h to use them.
The mpfr_t
type consists of four fields.
_mpfr_prec
field is used to store the precision of
the variable (in bits); this is not less than MPFR_PREC_MIN
.
_mpfr_sign
field is used to store the sign of the variable.
_mpfr_exp
field stores the exponent.
An exponent of 0 means a radix point just above the most significant
limb. Non-zero values n are a multiplier 2^n relative to that
point.
A NaN, an infinity and a zero are indicated by a special value of the exponent.
_mpfr_d
is a pointer to the limbs, least
significant limbs stored first.
The number of limbs in use is controlled by _mpfr_prec
, namely
ceil(_mpfr_prec
/mp_bits_per_limb
).
Non-singular values always have the most significant bit of the most
significant limb set to 1. When the precision does not correspond to a
whole number of limbs, the excess bits at the low end of the data are zero.
Assuming b is an approximation of an unknown number x in the direction rnd1 with error at most two to the power E(b)-err where E(b) is the exponent of b, return a non-zero value if one is able to round correctly x to precision prec with the direction rnd2, and 0 otherwise (including for NaN and Inf). This function does not modify its arguments.
Note: if one wants to also determine the correct ternary value when rounding b to precision prec, a useful trick is the following:
if (mpfr_can_round (b, err, rnd1, GMP_RNDZ, prec + (rnd2 == GMP_RNDN))) ...Indeed, if rnd2 isGMP_RNDN
, this will check if one can round to prec+1 bits with a directed rounding: if so, one can surely round to nearest to prec bits, and in addition one can determine the correct ternary value, which would not be the case when b is near from a value exactly representable on prec bits.