summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2012-08-28 13:11:20 +0000
committerenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2012-08-28 13:11:20 +0000
commitdafea60cfb97d2ddf76fd122adedb043ccb3b4bc (patch)
tree03525f77edbbed17c7da6d377d3b68836fa28faa
parent40ad07513b2f3164ccda55457862d9db3cba0e90 (diff)
downloadmpc-dafea60cfb97d2ddf76fd122adedb043ccb3b4bc.tar.gz
backported fix in r1254 to branch 1.0
git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/branches/1.0@1256 211d60ee-9f03-0410-a15a-8952a2c7a4e4
-rw-r--r--NEWS2
-rw-r--r--src/fma.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index bc65513..697ef60 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,7 @@
Changes in version 1.0.1:
- #14669: Fixed extraction of CC from gmp.h
+ - Fixed case of intermediate zero real or imaginary part in mpc_fma,
+ found by hydra with GMP_CHECK_RANDOMIZE=1346362345
Changes in version 1.0:
- First release as a GNU package
diff --git a/src/fma.c b/src/fma.c
index b0857f9..7f5cd31 100644
--- a/src/fma.c
+++ b/src/fma.c
@@ -159,9 +159,9 @@ mpc_fma (mpc_ptr r, mpc_srcptr a, mpc_srcptr b, mpc_srcptr c, mpc_rnd_t rnd)
break;
diffre = mpfr_get_exp (mpc_realref(ab));
diffim = mpfr_get_exp (mpc_imagref(ab));
+ mpc_add (ab, ab, c, MPC_RNDZZ);
if (mpfr_zero_p (mpc_realref(ab)) || mpfr_zero_p (mpc_imagref(ab)))
break;
- mpc_add (ab, ab, c, MPC_RNDZZ);
diffre -= mpfr_get_exp (mpc_realref(ab));
diffim -= mpfr_get_exp (mpc_imagref(ab));
diffre = (diffre > 0 ? diffre + 1 : 1);