diff options
author | zimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4> | 2009-08-26 11:08:10 +0000 |
---|---|---|
committer | zimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4> | 2009-08-26 11:08:10 +0000 |
commit | 74756ef67a54ea6caef356c7663939ee8c6f17ad (patch) | |
tree | 5d8f6e258201aa50595907a0a1dc542c5caced9e | |
parent | b72fa1555ab1e2c5d0fb80276e32c3fb7d119564 (diff) | |
download | mpc-74756ef67a54ea6caef356c7663939ee8c6f17ad.tar.gz |
[div.c] better solution for previous change: replace mpc_set by two calls to
mpfr_swap
git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@662 211d60ee-9f03-0410-a15a-8952a2c7a4e4
-rw-r--r-- | src/div.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -213,14 +213,17 @@ mpc_div (mpc_ptr a, mpc_srcptr b, mpc_srcptr c, mpc_rnd_t rnd) if (overlap) mpc_init3 (tmpa, MPFR_PREC (MPC_RE (a)), MPFR_PREC (MPC_IM (a))); + cloc[0] = MPC_IM(c)[0]; /* copies mpfr struct IM(c) into cloc */ inexact_re = mpfr_div (MPC_RE(dest), MPC_IM(b), cloc, MPC_RND_RE(rnd)); mpfr_neg (cloc, cloc, GMP_RNDN); /* changes the sign only in cloc, not in c; no need to correct later */ inexact_im = mpfr_div (MPC_IM(dest), MPC_RE(b), cloc, MPC_RND_IM(rnd)); + if (overlap) { - mpc_set (a, tmpa, MPC_RNDNN); /* exact */ + mpfr_swap (MPC_RE(a), MPC_RE(tmpa)); + mpfr_swap (MPC_IM(a), MPC_IM(tmpa)); mpc_clear (tmpa); } |