summaryrefslogtreecommitdiff
path: root/fits_u.h
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2010-04-30 15:50:27 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2010-04-30 15:50:27 +0000
commitcab2c98943d215f88a0fff88022020ea994acc58 (patch)
treef82f1914a1c0ba3e636cf7e3ba88b963b6b680f6 /fits_u.h
parent7ab898566fbc63b0b999c672142dd58412a62f52 (diff)
downloadmpfr-cab2c98943d215f88a0fff88022020ea994acc58.tar.gz
Optimized fits_u.h and made fits_uintmax.c like fits_u.h for the
special numbers. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@6769 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'fits_u.h')
-rw-r--r--fits_u.h22
1 files changed, 10 insertions, 12 deletions
diff --git a/fits_u.h b/fits_u.h
index f1726e6b5..a053e03d4 100644
--- a/fits_u.h
+++ b/fits_u.h
@@ -25,7 +25,7 @@ http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
int
FUNCTION (mpfr_srcptr f, mpfr_rnd_t rnd)
{
- mp_exp_t exp;
+ mp_exp_t e;
mpfr_prec_t prec;
TYPE s;
mpfr_t x;
@@ -41,31 +41,29 @@ FUNCTION (mpfr_srcptr f, mpfr_rnd_t rnd)
(a) f <= MAXIMUM
(b) round(f, prec(slong), rnd) <= MAXIMUM */
- exp = MPFR_GET_EXP (f);
- if (exp < 1)
+ e = MPFR_GET_EXP (f);
+ if (e < 1)
return 1; /* |f| < 1: always fits */
/* first compute prec(MAXIMUM) */
for (s = MAXIMUM, prec = 0; s != 0; s /= 2, prec ++);
- /* MAXIMUM needs prec bits, i.e. 2^(prec-1) <= |MAXIMUM| < 2^prec */
+ /* MAXIMUM needs prec bits, i.e. MAXIMUM = 2^prec - 1 */
- /* if exp < prec - 1, then f < 2^(prec-1) < |MAXIMUM| */
- if ((mpfr_prec_t) exp < prec - 1)
+ /* if e <= prec - 1, then f < 2^(prec-1) < MAXIMUM */
+ if ((mpfr_prec_t) e <= prec - 1)
return 1;
- /* if exp > prec + 1, then f >= 2^prec > MAXIMUM */
- if ((mpfr_prec_t) exp > prec + 1)
+ /* if e >= prec + 1, then f >= 2^prec > MAXIMUM */
+ if ((mpfr_prec_t) e >= prec + 1)
return 0;
- /* remains cases exp = prec-1 to prec+1 */
+ MPFR_ASSERTD (e == prec);
/* hard case: first round to prec bits, then check */
mpfr_init2 (x, prec);
mpfr_set (x, f, rnd);
- res = mpfr_cmp_ui (x, MAXIMUM) <= 0;
+ res = MPFR_GET_EXP (x) == e;
mpfr_clear (x);
-
return res;
}
-