summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2010-11-18 19:05:55 +0000
committerenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2010-11-18 19:05:55 +0000
commit10e075b830286e772482fbeedd649d346475c661 (patch)
tree97ffa4f25c8ba5d8c1fc18bfebbfbacc0182713d
parent36a7475d642b1e382eb683eed26b8aa2fbbf663a (diff)
downloadmpc-10e075b830286e772482fbeedd649d346475c661.tar.gz
sqrt.c: reimplement mpfr_min_prec for mpfr<3
sqrt (1+epsilon*i) is computed correctly when rounding to nearest, close to infinite loop is still present with directed rounding git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@853 211d60ee-9f03-0410-a15a-8952a2c7a4e4
-rw-r--r--NEWS1
-rw-r--r--src/sqrt.c7
2 files changed, 8 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 6cc46c0..0436bbd 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,7 @@ Changes in version 0.8.3:
- Bug fixes:
- trigonometric functions: infinite loop due to overflow for large arguments
- exp: close to infinite loop for argument close to 0
+ - sqrt: close to infinite loop for argument close to 1
- Minimally required library versions: gmp 4.3.2, mpfr 2.4.2
Changes in version 0.8.2:
diff --git a/src/sqrt.c b/src/sqrt.c
index a44c4c8..f30b64d 100644
--- a/src/sqrt.c
+++ b/src/sqrt.c
@@ -21,6 +21,13 @@ MA 02111-1307, USA. */
#include "mpc-impl.h"
+#if MPFR_VERSION_MAJOR < 3
+#define mpfr_min_prec(x) \
+ ( ((prec + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB) * BITS_PER_MP_LIMB \
+ - mpn_scan1 (x->_mpfr_d, 0))
+#endif
+
+
int
mpc_sqrt (mpc_ptr a, mpc_srcptr b, mpc_rnd_t rnd)
{