summaryrefslogtreecommitdiff
path: root/src/jn.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2011-03-07 11:08:08 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2011-03-07 11:08:08 +0000
commite81346238e9e41467b58a08287932f0bed0d6f9a (patch)
tree031c4ae6f455686d6eeff14c1606c28c90430e7f /src/jn.c
parentbe447fa86561d761ebd70c98980127e303d82348 (diff)
downloadmpfr-e81346238e9e41467b58a08287932f0bed0d6f9a.tar.gz
[src/jn.c] Added comments and fixed a bug.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@7537 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src/jn.c')
-rw-r--r--src/jn.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/jn.c b/src/jn.c
index da0449ad8..df08eaed5 100644
--- a/src/jn.c
+++ b/src/jn.c
@@ -215,6 +215,9 @@ mpfr_jn (mpfr_ptr res, long n, mpfr_srcptr z, mpfr_rnd_t r)
MPFR_LOG_MSG (("loop on k, k = %lu\n", k));
mpfr_mul (t, t, y, MPFR_RNDN);
mpfr_neg (t, t, MPFR_RNDN);
+ /* Mathematically: absn <= LONG_MAX + 1 <= (ULONG_MAX + 1) / 2,
+ and in practice, k is not very large, so that one should have
+ k + absn <= ULONG_MAX. */
MPFR_ASSERTN (absn <= ULONG_MAX - k);
if (k + absn <= ULONG_MAX / k)
mpfr_div_ui (t, t, k * (k + absn), MPFR_RNDN);
@@ -231,8 +234,9 @@ mpfr_jn (mpfr_ptr res, long n, mpfr_srcptr z, mpfr_rnd_t r)
exps = MPFR_IS_ZERO (s) ? MPFR_EMIN_MIN : MPFR_GET_EXP (s);
if (exps > expT)
expT = exps;
+ /* Above it has been checked that k + absn <= ULONG_MAX. */
if (MPFR_GET_EXP (t) + (mpfr_exp_t) prec <= exps &&
- zz / (2 * k) < k + n)
+ zz / (2 * k) < k + absn)
break;
}
/* the error is bounded by (4k^2+21/2k+7) ulp(s)*2^(expT-exps)