summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2012-07-05 17:00:06 +0000
committerzimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2012-07-05 17:00:06 +0000
commit9c6f1be522f49018a638139e606ab788b0254424 (patch)
tree6ecf376d1f6736b59698fd01eed082052b2a8421
parente343b7fb1293e21141cc9e107f90578e4415526d (diff)
downloadmpc-9c6f1be522f49018a638139e606ab788b0254424.tar.gz
[atan.c] fixed one wrong rounding mode, and added comments
git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@1234 211d60ee-9f03-0410-a15a-8952a2c7a4e4
-rw-r--r--src/atan.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/atan.c b/src/atan.c
index 760f5d8..fa0c81e 100644
--- a/src/atan.c
+++ b/src/atan.c
@@ -314,16 +314,18 @@ mpc_atan (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd)
mpfr_set_prec (y, p);
/* a = upper bound for log(x^2 + (1+y)^2) */
- mpfr_add_ui (a, mpc_imagref (op), 1, rnd1);
+ mpfr_add_ui (a, mpc_imagref (op), 1, rnd1); /* round away */
mpfr_sqr (a, a, GMP_RNDU);
mpfr_sqr (y, mpc_realref (op), GMP_RNDU);
mpfr_add (a, a, y, GMP_RNDU);
mpfr_log (a, a, GMP_RNDU);
/* b = lower bound for log(x^2 + (1-y)^2) */
- mpfr_ui_sub (b, 1, mpc_imagref (op), GMP_RNDZ);
- mpfr_sqr (b, b, GMP_RNDU);
- /* mpfr_sqr (y, mpc_realref (op), GMP_RNDZ); */
+ mpfr_ui_sub (b, 1, mpc_imagref (op), GMP_RNDZ); /* round to zero */
+ mpfr_sqr (b, b, GMP_RNDZ);
+ /* we could write mpfr_sqr (y, mpc_realref (op), GMP_RNDZ) but it is
+ more efficient to reuse the value of y (x^2) above and subtract
+ one ulp */
mpfr_nextbelow (y);
mpfr_add (b, b, y, GMP_RNDZ);
mpfr_log (b, b, GMP_RNDZ);