summaryrefslogtreecommitdiff
path: root/src/div.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2009-08-26 11:08:10 +0000
committerzimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2009-08-26 11:08:10 +0000
commit74756ef67a54ea6caef356c7663939ee8c6f17ad (patch)
tree5d8f6e258201aa50595907a0a1dc542c5caced9e /src/div.c
parentb72fa1555ab1e2c5d0fb80276e32c3fb7d119564 (diff)
downloadmpc-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
Diffstat (limited to 'src/div.c')
-rw-r--r--src/div.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/div.c b/src/div.c
index 95aa651..0d12cef 100644
--- a/src/div.c
+++ b/src/div.c
@@ -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);
}