diff options
author | zimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4> | 2012-07-05 17:00:06 +0000 |
---|---|---|
committer | zimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4> | 2012-07-05 17:00:06 +0000 |
commit | 9c6f1be522f49018a638139e606ab788b0254424 (patch) | |
tree | 6ecf376d1f6736b59698fd01eed082052b2a8421 | |
parent | e343b7fb1293e21141cc9e107f90578e4415526d (diff) | |
download | mpc-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.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -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); |