Update MPC library from version 1.0.1 to 1.0.3 vendor/MPC
authorJohn Marino <draco@marino.st>
Fri, 13 Mar 2015 16:03:07 +0000 (17:03 +0100)
committerJohn Marino <draco@marino.st>
Fri, 13 Mar 2015 17:13:57 +0000 (18:13 +0100)
contrib/mpc/src/atan.c
contrib/mpc/src/get_version.c
contrib/mpc/src/log10.c
contrib/mpc/src/mpc.h
contrib/mpc/src/pow.c

index c0b01a4..285f79f 100644 (file)
@@ -1,6 +1,6 @@
 /* mpc_atan -- arctangent of a complex number.
 
-Copyright (C) 2009, 2010, 2011, 2012 INRIA
+Copyright (C) 2009, 2010, 2011, 2012, 2013 INRIA
 
 This file is part of GNU MPC.
 
@@ -133,10 +133,10 @@ mpc_atan (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd)
         }
       else if (cmp_1 == 0)
         {
-          /* atan(+/-0+i) = NaN +i*inf
-             atan(+/-0-i) = NaN -i*inf */
-          mpfr_set_nan (mpc_realref (rop));
-          mpfr_set_inf (mpc_imagref (rop), s_im ? -1 : +1);
+          /* atan(+/-0 +i) = +/-0 +i*inf
+             atan(+/-0 -i) = +/-0 -i*inf */
+          mpfr_set_zero (mpc_realref (rop), s_re ? -1 : +1);
+          mpfr_set_inf  (mpc_imagref (rop), s_im ? -1 : +1);
         }
       else
         {
index 07c4264..88e7e98 100644 (file)
@@ -1,6 +1,6 @@
 /* mpc_get_version -- MPC version
 
-Copyright (C) 2008, 2009, 2010, 2011, 2012 INRIA
+Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015 INRIA
 
 This file is part of GNU MPC.
 
@@ -44,5 +44,6 @@ mpfr_regular_p (mpfr_srcptr z)
 const char *
 mpc_get_version (void)
 {
-  return "1.0.1";
+  return "1.0.3";
 }
+
index a6fc86c..4e77aaf 100644 (file)
@@ -77,16 +77,6 @@ mpc_log10_aux (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd, int flag, int nb)
             ret = mpfr_set (mpc_imagref (rop), mpc_imagref (tmp),
                             MPC_RND_IM (rnd));
           break;
-        case 3: /* real <- log(y) */
-          mpfr_log (mpc_realref (tmp), mpc_imagref (op), MPC_RND_RE (rnd));
-          mpfr_div (mpc_realref (tmp), mpc_realref (tmp), log10, GMP_RNDN);
-          ok = mpfr_can_round (mpc_realref (tmp), prec - 2, GMP_RNDN,
-                               GMP_RNDZ, MPC_PREC_RE(rop) +
-                               (MPC_RND_RE (rnd) == GMP_RNDN));
-          if (ok)
-            ret = mpfr_set (mpc_realref (rop), mpc_realref (tmp),
-                            MPC_RND_RE (rnd));
-          break;
         }
       prec += prec / 2;
       mpc_set_prec (tmp, prec);
@@ -197,17 +187,16 @@ mpc_log10 (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd)
      {
        if (im_cmp > 0)
          {
-           inex_re = mpc_log10_aux (rop, op, rnd, 0, 3);
+           inex_re = mpfr_log10 (mpc_realref (rop), mpc_imagref (op), MPC_RND_RE (rnd));
            inex_im = mpc_log10_aux (rop, op, rnd, 1, 2);
            /* division by 2 does not change the ternary flag */
            mpfr_div_2ui (mpc_imagref (rop), mpc_imagref (rop), 1, GMP_RNDN);
          }
        else
          {
-           ww->re[0] = *mpc_realref (op);
-           ww->im[0] = *mpc_imagref (op);
-           MPFR_CHANGE_SIGN (ww->im);
-           inex_re = mpc_log10_aux (rop, ww, rnd, 0, 3);
+           w [0] = *mpc_imagref (op);
+           MPFR_CHANGE_SIGN (w);
+           inex_re = mpfr_log10 (mpc_realref (rop), w, MPC_RND_RE (rnd));
            invrnd = MPC_RND (0, INV_RND (MPC_RND_IM (rnd)));
            inex_im = mpc_log10_aux (rop, op, invrnd, 1, 2);
            /* division by 2 does not change the ternary flag */
index 02c1943..f6e1bee 100644 (file)
@@ -1,6 +1,6 @@
 /* mpc.h -- Include file for mpc.
 
-Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012 INRIA
+Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2014, 2015 INRIA
 
 This file is part of GNU MPC.
 
@@ -32,8 +32,8 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
 /* Define MPC version number */
 #define MPC_VERSION_MAJOR 1
 #define MPC_VERSION_MINOR 0
-#define MPC_VERSION_PATCHLEVEL 1
-#define MPC_VERSION_STRING "1.0.1"
+#define MPC_VERSION_PATCHLEVEL 3
+#define MPC_VERSION_STRING "1.0.3"
 
 /* Macros dealing with MPC VERSION */
 #define MPC_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
index 892f467..2525644 100644 (file)
@@ -645,7 +645,7 @@ mpc_pow (mpc_ptr z, mpc_srcptr x, mpc_srcptr y, mpc_rnd_t rnd)
   pi = mpfr_get_prec (mpc_imagref(z));
   p = (pr > pi) ? pr : pi;
   p += 12; /* experimentally, seems to give less than 10% of failures in
-              Ziv's strategy; probably wrong now since q is not computed      */
+              Ziv's strategy; probably wrong now since q is not computed */
   if (p < 64)
     p = 64;
   mpc_init2 (u, p);
@@ -658,18 +658,17 @@ mpc_pow (mpc_ptr z, mpc_srcptr x, mpc_srcptr y, mpc_rnd_t rnd)
     {
       int ret_exp;
       mpfr_exp_t dr, di;
-      mpfr_prec_t q=0;
-      /* to avoid warning message, real initialisation below */
+      mpfr_prec_t q;
 
       mpc_log (t, x, MPC_RNDNN);
       mpc_mul (t, t, y, MPC_RNDNN);
 
-      if (loop == 0) {
-         /* compute q such that |Re (y log x)|, |Im (y log x)| < 2^q */
-         q = mpfr_get_exp (mpc_realref(t)) > 0 ? mpfr_get_exp (mpc_realref(t)) : 0;
-         if (mpfr_get_exp (mpc_imagref(t)) > (mpfr_exp_t) q)
-            q = mpfr_get_exp (mpc_imagref(t));
-      }
+      /* Compute q such that |Re (y log x)|, |Im (y log x)| < 2^q.
+         We recompute it at each loop since we might get different
+         bounds if the precision is not enough. */
+      q = mpfr_get_exp (mpc_realref(t)) > 0 ? mpfr_get_exp (mpc_realref(t)) : 0;
+      if (mpfr_get_exp (mpc_imagref(t)) > (mpfr_exp_t) q)
+        q = mpfr_get_exp (mpc_imagref(t));
 
       mpfr_clear_overflow ();
       mpfr_clear_underflow ();