diff options
author | Paul Zimmermann <Paul.Zimmermann@inria.fr> | 2020-02-06 18:35:19 +0100 |
---|---|---|
committer | Paul Zimmermann <Paul.Zimmermann@inria.fr> | 2020-02-06 18:35:19 +0100 |
commit | 0fce03e7e78fe6bf789e3d372fdc6dbd27bf63a6 (patch) | |
tree | 8bd293d0f99c83ca2931616eeef66348b1dea866 /src/acos.c | |
parent | fbcde25676931fbdbf707d03fd980c1936a00b02 (diff) | |
download | mpc-git-0fce03e7e78fe6bf789e3d372fdc6dbd27bf63a6.tar.gz |
enlarge internal exponent range for several functions + mpcheck cleanup
Diffstat (limited to 'src/acos.c')
-rw-r--r-- | src/acos.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -31,6 +31,7 @@ mpc_acos (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd) mpfr_exp_t e1, e2; mpfr_rnd_t rnd_im; mpc_rnd_t rnd1; + mpfr_exp_t saved_emin, saved_emax; inex_re = 0; inex_im = 0; @@ -170,6 +171,11 @@ mpc_acos (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd) return MPC_INEX (inex_re, inex_im); } + saved_emin = mpfr_get_emin (); + saved_emax = mpfr_get_emax (); + mpfr_set_emin (mpfr_get_emin_min ()); + mpfr_set_emax (mpfr_get_emax_max ()); + /* regular complex argument: acos(z) = Pi/2 - asin(z) */ p_re = mpfr_get_prec (mpc_realref(rop)); p_im = mpfr_get_prec (mpc_imagref(rop)); @@ -225,5 +231,11 @@ mpc_acos (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd) mpc_clear (z1); mpfr_clear (pi_over_2); + /* restore the exponent range, and check the range of results */ + mpfr_set_emin (saved_emin); + mpfr_set_emax (saved_emax); + inex_re = mpfr_check_range (mpc_realref (rop), inex_re, MPC_RND_RE (rnd)); + inex_im = mpfr_check_range (mpc_imagref (rop), inex_im, MPC_RND_IM (rnd)); + return MPC_INEX(inex_re, inex_im); } |