From e1f90819ca230db2a4d9be91307eb2a2ceb1ab5c Mon Sep 17 00:00:00 2001 From: Ivana Varekova Date: Sep 20 2007 09:15:48 +0000 Subject: - update to 2.3.0 - fix license flag --- diff --git a/.cvsignore b/.cvsignore index b811658..a8e067a 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -mpfr-2.2.1.tar.bz2 +mpfr-2.3.0.tar.bz2 diff --git a/mpfr-2.2.1-upstream.patch b/mpfr-2.2.1-upstream.patch deleted file mode 100644 index 1e8f3b2..0000000 --- a/mpfr-2.2.1-upstream.patch +++ /dev/null @@ -1,1082 +0,0 @@ -diff -Naurd mpfr-2.2.1/VERSION mpfr-2.2.1-p1/VERSION ---- mpfr-2.2.1/VERSION 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p1/VERSION 2007-02-02 00:01:41.000000000 +0000 -@@ -1 +1 @@ --2.2.1 -+2.2.1-p1 -diff -Naurd mpfr-2.2.1/mpfr.h mpfr-2.2.1-p1/mpfr.h ---- mpfr-2.2.1/mpfr.h 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p1/mpfr.h 2007-02-02 00:01:41.000000000 +0000 -@@ -26,7 +26,7 @@ - #define MPFR_VERSION_MAJOR 2 - #define MPFR_VERSION_MINOR 2 - #define MPFR_VERSION_PATCHLEVEL 1 --#define MPFR_VERSION_STRING "2.2.1" -+#define MPFR_VERSION_STRING "2.2.1-p1" - - /* Macros dealing with MPFR VERSION */ - #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -@@ -680,6 +680,8 @@ - ( mpfr_init(x), mpfr_set_ui((x), (i), (rnd)) ) - #define mpfr_init_set_d(x, d, rnd) \ - ( mpfr_init(x), mpfr_set_d((x), (d), (rnd)) ) -+#define mpfr_init_set_ld(x, d, rnd) \ -+ ( mpfr_init(x), mpfr_set_ld((x), (d), (rnd)) ) - #define mpfr_init_set_z(x, i, rnd) \ - ( mpfr_init(x), mpfr_set_z((x), (i), (rnd)) ) - #define mpfr_init_set_q(x, i, rnd) \ -diff -Naurd mpfr-2.2.1/tests/tversion.c mpfr-2.2.1-p1/tests/tversion.c ---- mpfr-2.2.1/tests/tversion.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p1/tests/tversion.c 2007-02-02 00:01:41.000000000 +0000 -@@ -45,7 +45,7 @@ - version = mpfr_get_version (); - - /* This test is disabled when a suffix (e.g. -dev) has been defined. */ --#if 1 -+#if 0 - sprintf (buffer, "%d.%d.%d", MPFR_VERSION_MAJOR, MPFR_VERSION_MINOR, - MPFR_VERSION_PATCHLEVEL); - if (strcmp (buffer, version) != 0) -diff -Naurd mpfr-2.2.1/version.c mpfr-2.2.1-p1/version.c ---- mpfr-2.2.1/version.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p1/version.c 2007-02-02 00:01:41.000000000 +0000 -@@ -24,5 +24,5 @@ - const char * - mpfr_get_version (void) - { -- return "2.2.1"; -+ return "2.2.1-p1"; - } -diff -Naurd mpfr-2.2.1-p1/VERSION mpfr-2.2.1-p2/VERSION ---- mpfr-2.2.1-p1/VERSION 2007-02-02 00:01:41.000000000 +0000 -+++ mpfr-2.2.1-p2/VERSION 2007-02-15 23:37:58.000000000 +0000 -@@ -1 +1 @@ --2.2.1-p1 -+2.2.1-p2 -diff -Naurd mpfr-2.2.1-p1/mpfr.h mpfr-2.2.1-p2/mpfr.h ---- mpfr-2.2.1-p1/mpfr.h 2007-02-02 00:01:41.000000000 +0000 -+++ mpfr-2.2.1-p2/mpfr.h 2007-02-15 23:37:58.000000000 +0000 -@@ -26,7 +26,7 @@ - #define MPFR_VERSION_MAJOR 2 - #define MPFR_VERSION_MINOR 2 - #define MPFR_VERSION_PATCHLEVEL 1 --#define MPFR_VERSION_STRING "2.2.1-p1" -+#define MPFR_VERSION_STRING "2.2.1-p2" - - /* Macros dealing with MPFR VERSION */ - #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -diff -Naurd mpfr-2.2.1-p1/tests/tget_f.c mpfr-2.2.1-p2/tests/tget_f.c ---- mpfr-2.2.1-p1/tests/tget_f.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p2/tests/tget_f.c 2007-02-15 23:37:53.000000000 +0000 -@@ -153,8 +153,9 @@ - } - if (i <= - (unsigned long) LONG_MIN) - { -- mpfr_set_si (y, - (long) i, GMP_RNDN); -- if (mpfr_get_f (x, y, GMP_RNDN) || mpf_cmp_si (x, - (long) i)) -+ long j = i < - (unsigned long) LONG_MIN ? - (long) i : LONG_MIN; -+ mpfr_set_si (y, j, GMP_RNDN); -+ if (mpfr_get_f (x, y, GMP_RNDN) || mpf_cmp_si (x, j)) - { - printf ("Error: mpfr_get_f(-%lu) fails\n", i); - exit (1); -diff -Naurd mpfr-2.2.1-p1/version.c mpfr-2.2.1-p2/version.c ---- mpfr-2.2.1-p1/version.c 2007-02-02 00:01:41.000000000 +0000 -+++ mpfr-2.2.1-p2/version.c 2007-02-15 23:37:58.000000000 +0000 -@@ -24,5 +24,5 @@ - const char * - mpfr_get_version (void) - { -- return "2.2.1-p1"; -+ return "2.2.1-p2"; - } -diff -Naurd mpfr-2.2.1-p2/VERSION mpfr-2.2.1-p3/VERSION ---- mpfr-2.2.1-p2/VERSION 2007-02-15 23:37:58.000000000 +0000 -+++ mpfr-2.2.1-p3/VERSION 2007-02-15 23:40:49.000000000 +0000 -@@ -1 +1 @@ --2.2.1-p2 -+2.2.1-p3 -diff -Naurd mpfr-2.2.1-p2/mpfr.h mpfr-2.2.1-p3/mpfr.h ---- mpfr-2.2.1-p2/mpfr.h 2007-02-15 23:37:58.000000000 +0000 -+++ mpfr-2.2.1-p3/mpfr.h 2007-02-15 23:40:49.000000000 +0000 -@@ -26,7 +26,7 @@ - #define MPFR_VERSION_MAJOR 2 - #define MPFR_VERSION_MINOR 2 - #define MPFR_VERSION_PATCHLEVEL 1 --#define MPFR_VERSION_STRING "2.2.1-p2" -+#define MPFR_VERSION_STRING "2.2.1-p3" - - /* Macros dealing with MPFR VERSION */ - #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -@@ -626,13 +626,13 @@ - _p->_mpfr_sign = 1; \ - _p->_mpfr_exp = __MPFR_EXP_ZERO; \ - (void) (_r); 0; }) : \ -- mpfr_set_ui (_f,_u,_r)) -+ mpfr_set_ui_2exp ((_f), (_u), 0, (_r))) - #endif - #undef mpfr_set_si - #define mpfr_set_si(_f,_s,_r) \ - (__builtin_constant_p (_s) && (_s) >= 0 ? \ - mpfr_set_ui ((_f), (_s), (_r)) : \ -- mpfr_set_si ((_f), (_s), (_r))) -+ mpfr_set_si_2exp ((_f), (_s), 0, (_r))) - #endif - #endif - -diff -Naurd mpfr-2.2.1-p2/set_si.c mpfr-2.2.1-p3/set_si.c ---- mpfr-2.2.1-p2/set_si.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p3/set_si.c 2007-02-15 23:40:22.000000000 +0000 -@@ -19,62 +19,11 @@ - the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301, USA. */ - --#define MPFR_NEED_LONGLONG_H - #include "mpfr-impl.h" - -+#undef mpfr_set_si - int --(mpfr_set_si) (mpfr_ptr x, long i, mp_rnd_t rnd_mode) -+mpfr_set_si (mpfr_ptr x, long i, mp_rnd_t rnd_mode) - { -- int inex; -- mp_size_t xn; -- unsigned int cnt, nbits; -- mp_limb_t ai, *xp; -- -- MPFR_CLEAR_FLAGS(x); -- if (i == 0) -- { -- MPFR_SET_ZERO(x); -- MPFR_SET_POS(x); -- MPFR_RET(0); -- } -- -- xn = (MPFR_PREC(x)-1)/BITS_PER_MP_LIMB; -- ai = SAFE_ABS(unsigned long, i); -- MPFR_ASSERTN(SAFE_ABS(unsigned long, i) == ai); -- count_leading_zeros(cnt, ai); -- -- xp = MPFR_MANT(x); -- xp[xn] = ai << cnt; -- /* don't forget to put zero in lower limbs */ -- MPN_ZERO(xp, xn); -- /* set sign */ -- if (i < 0) -- MPFR_SET_NEG(x); -- else -- MPFR_SET_POS(x); -- -- nbits = BITS_PER_MP_LIMB - cnt; -- MPFR_EXP (x) = nbits; /* may be out-of-range, check range below */ -- inex = mpfr_check_range(x, 0, rnd_mode); -- if (inex) -- return inex; /* underflow or overflow */ -- -- /* round if MPFR_PREC(x) smaller than length of i */ -- if (MPFR_UNLIKELY(MPFR_PREC(x) < nbits)) -- { -- int carry; -- -- carry = mpfr_round_raw(xp+xn, xp+xn, nbits, (i < 0), MPFR_PREC(x), -- rnd_mode, &inex); -- if (MPFR_UNLIKELY(carry)) -- { -- /* nbits is the current exponent */ -- if (MPFR_UNLIKELY((mp_exp_t) nbits == __gmpfr_emax)) -- return mpfr_overflow(x, rnd_mode, (i < 0 ? -1 : 1)); -- MPFR_SET_EXP (x, nbits + 1); -- xp[xn] = MPFR_LIMB_HIGHBIT; -- } -- } -- -- MPFR_RET(inex); -+ return mpfr_set_si_2exp (x, i, 0, rnd_mode); - } -diff -Naurd mpfr-2.2.1-p2/set_si_2exp.c mpfr-2.2.1-p3/set_si_2exp.c ---- mpfr-2.2.1-p2/set_si_2exp.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p3/set_si_2exp.c 2007-02-15 23:40:22.000000000 +0000 -@@ -20,18 +20,54 @@ - the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301, USA. */ - -+#define MPFR_NEED_LONGLONG_H - #include "mpfr-impl.h" - - int - mpfr_set_si_2exp (mpfr_ptr x, long i, mp_exp_t e, mp_rnd_t rnd_mode) - { -- int res; -- MPFR_SAVE_EXPO_DECL (expo); -+ if (i == 0) -+ { -+ MPFR_SET_ZERO (x); -+ MPFR_SET_POS (x); -+ MPFR_RET (0); -+ } -+ else -+ { -+ mp_size_t xn; -+ unsigned int cnt, nbits; -+ mp_limb_t ai, *xp; -+ int inex = 0; - -- MPFR_SAVE_EXPO_MARK (expo); -- res = mpfr_set_si (x, i, rnd_mode); -- mpfr_mul_2si (x, x, e, rnd_mode); /* Should be exact */ -- MPFR_SAVE_EXPO_FREE (expo); -- res = mpfr_check_range(x, res, rnd_mode); -- return res; -+ /* FIXME: support int limbs (e.g. 16-bit limbs on 16-bit proc) */ -+ ai = SAFE_ABS (unsigned long, i); -+ MPFR_ASSERTN (SAFE_ABS (unsigned long, i) == ai); -+ -+ /* Position of the highest limb */ -+ xn = (MPFR_PREC (x) - 1) / BITS_PER_MP_LIMB; -+ count_leading_zeros (cnt, ai); -+ MPFR_ASSERTD (cnt < BITS_PER_MP_LIMB); /* OK since i != 0 */ -+ -+ xp = MPFR_MANT(x); -+ xp[xn] = ai << cnt; -+ /* Zero the xn lower limbs. */ -+ MPN_ZERO(xp, xn); -+ MPFR_SET_SIGN (x, i < 0 ? MPFR_SIGN_NEG : MPFR_SIGN_POS); -+ -+ nbits = BITS_PER_MP_LIMB - cnt; -+ e += nbits; /* exponent _before_ the rounding */ -+ -+ /* round if MPFR_PREC(x) smaller than length of i */ -+ if (MPFR_UNLIKELY (MPFR_PREC (x) < nbits) && -+ MPFR_UNLIKELY (mpfr_round_raw (xp + xn, xp + xn, nbits, i < 0, -+ MPFR_PREC (x), rnd_mode, &inex))) -+ { -+ e++; -+ xp[xn] = MPFR_LIMB_HIGHBIT; -+ } -+ -+ MPFR_CLEAR_FLAGS (x); -+ MPFR_EXP (x) = e; -+ return mpfr_check_range (x, inex, rnd_mode); -+ } - } -diff -Naurd mpfr-2.2.1-p2/set_ui.c mpfr-2.2.1-p3/set_ui.c ---- mpfr-2.2.1-p2/set_ui.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p3/set_ui.c 2007-02-15 23:40:21.000000000 +0000 -@@ -19,60 +19,11 @@ - the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301, USA. */ - --#define MPFR_NEED_LONGLONG_H - #include "mpfr-impl.h" - - #undef mpfr_set_ui - int - mpfr_set_ui (mpfr_ptr x, unsigned long i, mp_rnd_t rnd_mode) - { -- int inex; -- -- MPFR_SET_POS(x); -- if (i == 0) -- { -- MPFR_SET_ZERO(x); -- MPFR_RET(0); -- } -- else -- { -- mp_size_t xn; -- unsigned int cnt, nbits; -- mp_limb_t *xp; -- -- MPFR_CLEAR_FLAGS(x); -- -- xn = (MPFR_PREC(x)-1)/BITS_PER_MP_LIMB; -- MPFR_ASSERTD(i == (mp_limb_t) i); -- count_leading_zeros(cnt, (mp_limb_t) i); -- -- xp = MPFR_MANT(x); -- xp[xn] = ((mp_limb_t) i) << cnt; -- /* don't forget to put zero in lower limbs */ -- MPN_ZERO(xp, xn); -- -- nbits = BITS_PER_MP_LIMB - cnt; -- MPFR_EXP (x) = nbits; /* may be out-of-range, check range below */ -- inex = mpfr_check_range(x, 0, rnd_mode); -- if (inex) -- return inex; /* underflow or overflow */ -- -- /* round if MPFR_PREC(x) smaller than length of i */ -- if (MPFR_UNLIKELY( MPFR_PREC(x) < nbits) ) -- { -- int carry; -- carry = mpfr_round_raw(xp+xn, xp+xn, nbits, 0, MPFR_PREC(x), -- rnd_mode, &inex); -- if (MPFR_UNLIKELY(carry)) -- { -- /* nbits is the current exponent */ -- if (MPFR_UNLIKELY((mp_exp_t) nbits == __gmpfr_emax)) -- return mpfr_overflow(x, rnd_mode, 1); -- -- MPFR_SET_EXP (x, nbits + 1); -- xp[xn] = MPFR_LIMB_HIGHBIT; -- } -- } -- } -- MPFR_RET(inex); -+ return mpfr_set_ui_2exp (x, i, 0, rnd_mode); - } -diff -Naurd mpfr-2.2.1-p2/set_ui_2exp.c mpfr-2.2.1-p3/set_ui_2exp.c ---- mpfr-2.2.1-p2/set_ui_2exp.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p3/set_ui_2exp.c 2007-02-15 23:40:22.000000000 +0000 -@@ -20,18 +20,53 @@ - the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301, USA. */ - -+#define MPFR_NEED_LONGLONG_H - #include "mpfr-impl.h" - - int - mpfr_set_ui_2exp (mpfr_ptr x, unsigned long i, mp_exp_t e, mp_rnd_t rnd_mode) - { -- int res; -- MPFR_SAVE_EXPO_DECL (expo); -+ MPFR_SET_POS (x); - -- MPFR_SAVE_EXPO_MARK (expo); -- res = mpfr_set_ui (x, i, rnd_mode); -- mpfr_mul_2si (x, x, e, rnd_mode); /* Should be exact */ -- MPFR_SAVE_EXPO_FREE (expo); -- res = mpfr_check_range(x, res, rnd_mode); -- return res; -+ if (i == 0) -+ { -+ MPFR_SET_ZERO (x); -+ MPFR_RET (0); -+ } -+ else -+ { -+ mp_size_t xn; -+ unsigned int cnt, nbits; -+ mp_limb_t *xp; -+ int inex = 0; -+ -+ /* FIXME: support int limbs (e.g. 16-bit limbs on 16-bit proc) */ -+ MPFR_ASSERTD (i == (mp_limb_t) i); -+ -+ /* Position of the highest limb */ -+ xn = (MPFR_PREC (x) - 1) / BITS_PER_MP_LIMB; -+ count_leading_zeros (cnt, (mp_limb_t) i); -+ MPFR_ASSERTD (cnt < BITS_PER_MP_LIMB); /* OK since i != 0 */ -+ -+ xp = MPFR_MANT(x); -+ xp[xn] = ((mp_limb_t) i) << cnt; -+ /* Zero the xn lower limbs. */ -+ MPN_ZERO(xp, xn); -+ -+ nbits = BITS_PER_MP_LIMB - cnt; -+ e += nbits; /* exponent _before_ the rounding */ -+ -+ /* round if MPFR_PREC(x) smaller than length of i */ -+ if (MPFR_UNLIKELY (MPFR_PREC (x) < nbits) && -+ MPFR_UNLIKELY (mpfr_round_raw (xp + xn, xp + xn, nbits, 0, -+ MPFR_PREC (x), rnd_mode, &inex))) -+ { -+ e++; -+ xp[xn] = MPFR_LIMB_HIGHBIT; -+ } -+ -+ MPFR_CLEAR_FLAGS (x); -+ MPFR_EXP (x) = e; -+ return mpfr_check_range (x, inex, rnd_mode); -+ } - } -diff -Naurd mpfr-2.2.1-p2/tests/tset_si.c mpfr-2.2.1-p3/tests/tset_si.c ---- mpfr-2.2.1-p2/tests/tset_si.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p3/tests/tset_si.c 2007-02-15 23:40:21.000000000 +0000 -@@ -69,6 +69,27 @@ - if (mpfr_cmp_ui (x, 1<<13) || res <= 0) - ERROR ("Prec 2 + ui_2exp"); - -+ mpfr_clear_flags (); -+ mpfr_set_ui_2exp (x, 17, MPFR_EMAX_MAX, GMP_RNDN); -+ if (!mpfr_inf_p (x) || MPFR_IS_NEG (x)) -+ ERROR ("mpfr_set_ui_2exp and overflow (bad result)"); -+ if (!mpfr_overflow_p ()) -+ ERROR ("mpfr_set_ui_2exp and overflow (overflow flag not set)"); -+ -+ mpfr_clear_flags (); -+ mpfr_set_si_2exp (x, 17, MPFR_EMAX_MAX, GMP_RNDN); -+ if (!mpfr_inf_p (x) || MPFR_IS_NEG (x)) -+ ERROR ("mpfr_set_si_2exp (pos) and overflow (bad result)"); -+ if (!mpfr_overflow_p ()) -+ ERROR ("mpfr_set_si_2exp (pos) and overflow (overflow flag not set)"); -+ -+ mpfr_clear_flags (); -+ mpfr_set_si_2exp (x, -17, MPFR_EMAX_MAX, GMP_RNDN); -+ if (!mpfr_inf_p (x) || MPFR_IS_POS (x)) -+ ERROR ("mpfr_set_si_2exp (neg) and overflow (bad result)"); -+ if (!mpfr_overflow_p ()) -+ ERROR ("mpfr_set_si_2exp (neg) and overflow (overflow flag not set)"); -+ - mpfr_clear (x); - } - -@@ -112,7 +133,8 @@ - unsigned long zl, dl; - int inex; - int r; -- mp_exp_t emax; -+ mp_exp_t emin, emax; -+ int flag; - - tests_start_mpfr (); - -@@ -350,6 +372,43 @@ - exit (1); - } - -+ emin = mpfr_get_emin (); -+ mpfr_set_prec (x, 2); -+ -+ mpfr_set_emin (4); -+ mpfr_clear_flags (); -+ mpfr_set_ui (x, 7, GMP_RNDU); -+ flag = mpfr_underflow_p (); -+ mpfr_set_emin (emin); -+ if (mpfr_cmp_ui (x, 8) != 0) -+ { -+ printf ("Error for mpfr_set_ui (x, 7, GMP_RNDU), prec = 2, emin = 4\n"); -+ exit (1); -+ } -+ if (flag) -+ { -+ printf ("mpfr_set_ui (x, 7, GMP_RNDU) should not underflow " -+ "with prec = 2, emin = 4\n"); -+ exit (1); -+ } -+ -+ mpfr_set_emin (4); -+ mpfr_clear_flags (); -+ mpfr_set_si (x, -7, GMP_RNDD); -+ flag = mpfr_underflow_p (); -+ mpfr_set_emin (emin); -+ if (mpfr_cmp_si (x, -8) != 0) -+ { -+ printf ("Error for mpfr_set_si (x, -7, GMP_RNDD), prec = 2, emin = 4\n"); -+ exit (1); -+ } -+ if (flag) -+ { -+ printf ("mpfr_set_si (x, -7, GMP_RNDD) should not underflow " -+ "with prec = 2, emin = 4\n"); -+ exit (1); -+ } -+ - mpfr_clear (x); - - test_2exp (); -diff -Naurd mpfr-2.2.1-p2/version.c mpfr-2.2.1-p3/version.c ---- mpfr-2.2.1-p2/version.c 2007-02-15 23:37:58.000000000 +0000 -+++ mpfr-2.2.1-p3/version.c 2007-02-15 23:40:49.000000000 +0000 -@@ -24,5 +24,5 @@ - const char * - mpfr_get_version (void) - { -- return "2.2.1-p2"; -+ return "2.2.1-p3"; - } -diff -Naurd mpfr-2.2.1-p3/VERSION mpfr-2.2.1-p4/VERSION ---- mpfr-2.2.1-p3/VERSION 2007-02-15 23:40:49.000000000 +0000 -+++ mpfr-2.2.1-p4/VERSION 2007-02-15 23:43:29.000000000 +0000 -@@ -1 +1 @@ --2.2.1-p3 -+2.2.1-p4 -diff -Naurd mpfr-2.2.1-p3/mpfr.h mpfr-2.2.1-p4/mpfr.h ---- mpfr-2.2.1-p3/mpfr.h 2007-02-15 23:40:49.000000000 +0000 -+++ mpfr-2.2.1-p4/mpfr.h 2007-02-15 23:43:29.000000000 +0000 -@@ -26,7 +26,7 @@ - #define MPFR_VERSION_MAJOR 2 - #define MPFR_VERSION_MINOR 2 - #define MPFR_VERSION_PATCHLEVEL 1 --#define MPFR_VERSION_STRING "2.2.1-p3" -+#define MPFR_VERSION_STRING "2.2.1-p4" - - /* Macros dealing with MPFR VERSION */ - #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -diff -Naurd mpfr-2.2.1-p3/pow_si.c mpfr-2.2.1-p4/pow_si.c ---- mpfr-2.2.1-p3/pow_si.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p4/pow_si.c 2007-02-15 23:43:17.000000000 +0000 -@@ -67,24 +67,20 @@ - /* detect exact powers: x^(-n) is exact iff x is a power of 2 */ - if (mpfr_cmp_si_2exp (x, MPFR_SIGN(x), MPFR_EXP(x) - 1) == 0) - { -- mp_exp_t expx = MPFR_EXP (x); /* warning: x and y may be the same -- variable */ -- mpfr_set_si (y, (n % 2) ? MPFR_INT_SIGN(x) : 1, rnd); -- expx --; -+ mp_exp_t expx = MPFR_EXP (x) - 1, expy; - MPFR_ASSERTD (n < 0); -- /* Warning n*expx may overflow! -- Some systems abort with LONG_MIN / 1 or LONG_MIN/-1*/ -- if (n != -1 && expx > 0 && -expx < MPFR_EXP_MIN / (-n)) -- MPFR_EXP (y) = MPFR_EMIN_MIN - 1; /* Underflow */ -- else if (n != -1 && expx < 0 && -expx > MPFR_EXP_MAX / (-n)) -- MPFR_EXP (y) = MPFR_EMAX_MAX + 1; /* Overflow */ -- else -- MPFR_EXP (y) += n * expx; -- return mpfr_check_range (y, 0, rnd); -+ /* Warning: n * expx may overflow! -+ Some systems (apparently alpha-freebsd) abort with -+ LONG_MIN / 1, and LONG_MIN / -1 is undefined. */ -+ expy = -+ n != -1 && expx > 0 && expx > (__gmpfr_emin - 1) / n ? -+ MPFR_EMIN_MIN - 2 /* Underflow */ : -+ n != -1 && expx < 0 && expx < (__gmpfr_emax - 1) / n ? -+ MPFR_EMAX_MAX /* Overflow */ : n * expx; -+ return mpfr_set_si_2exp (y, n % 2 ? MPFR_INT_SIGN (x) : 1, -+ expy, rnd); - } - -- n = -n; -- - /* General case */ - { - /* Declaration of the intermediary variable */ -@@ -94,9 +90,12 @@ - mp_prec_t Nt; /* working precision */ - mp_exp_t err; /* error */ - int inexact; -+ unsigned long abs_n; - MPFR_SAVE_EXPO_DECL (expo); - MPFR_ZIV_DECL (loop); - -+ abs_n = - (unsigned long) n; -+ - /* compute the precision of intermediary variable */ - /* the optimal number of bits : see algorithms.tex */ - Nt = Ny + 3 + MPFR_INT_CEIL_LOG2 (Ny); -@@ -109,17 +108,17 @@ - MPFR_ZIV_INIT (loop, Nt); - for (;;) - { -- /* compute 1/(x^n) n>0*/ -- mpfr_pow_ui (t, x, (unsigned long int) n, GMP_RNDN); -+ /* compute 1/(x^n), with n > 0 */ -+ mpfr_pow_ui (t, x, abs_n, GMP_RNDN); - mpfr_ui_div (t, 1, t, GMP_RNDN); -- /* FIXME: old code improved, but I think this is still incorrect. */ -+ /* FIXME: old code improved, but I think this is still incorrect. */ - if (MPFR_UNLIKELY (MPFR_IS_ZERO (t))) - { - MPFR_ZIV_FREE (loop); - mpfr_clear (t); - MPFR_SAVE_EXPO_FREE (expo); - return mpfr_underflow (y, rnd == GMP_RNDN ? GMP_RNDZ : rnd, -- (unsigned) n & 1 ? MPFR_SIGN (x) : -+ abs_n & 1 ? MPFR_SIGN (x) : - MPFR_SIGN_POS); - } - if (MPFR_UNLIKELY (MPFR_IS_INF (t))) -@@ -127,8 +126,7 @@ - MPFR_ZIV_FREE (loop); - mpfr_clear (t); - MPFR_SAVE_EXPO_FREE (expo); -- return mpfr_overflow (y, rnd, -- (unsigned) n & 1 ? MPFR_SIGN (x) : -+ return mpfr_overflow (y, rnd, abs_n & 1 ? MPFR_SIGN (x) : - MPFR_SIGN_POS); - } - /* error estimate -- see pow function in algorithms.ps */ -diff -Naurd mpfr-2.2.1-p3/tests/tpow.c mpfr-2.2.1-p4/tests/tpow.c ---- mpfr-2.2.1-p3/tests/tpow.c 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p4/tests/tpow.c 2007-02-15 23:43:17.000000000 +0000 -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - - #include "mpfr-test.h" - -@@ -231,6 +232,55 @@ - mpfr_pow_si (x, x, -2, GMP_RNDN); - MPFR_ASSERTN(mpfr_inf_p (x) && mpfr_sgn (x) > 0); - -+ mpfr_set_si (x, 2, GMP_RNDN); -+ mpfr_pow_si (x, x, LONG_MAX, GMP_RNDN); /* 2^LONG_MAX */ -+ if (LONG_MAX > mpfr_get_emax () - 1) /* LONG_MAX + 1 > emax */ -+ { -+ MPFR_ASSERTN (mpfr_inf_p (x)); -+ } -+ else -+ { -+ MPFR_ASSERTN (mpfr_cmp_si_2exp (x, 1, LONG_MAX)); -+ } -+ -+ mpfr_set_si (x, 2, GMP_RNDN); -+ mpfr_pow_si (x, x, LONG_MIN, GMP_RNDN); /* 2^LONG_MIN */ -+ if (LONG_MIN + 1 < mpfr_get_emin ()) -+ { -+ MPFR_ASSERTN (mpfr_zero_p (x)); -+ } -+ else -+ { -+ MPFR_ASSERTN (mpfr_cmp_si_2exp (x, 1, LONG_MIN)); -+ } -+ -+ mpfr_set_si (x, 2, GMP_RNDN); -+ mpfr_pow_si (x, x, LONG_MIN + 1, GMP_RNDN); /* 2^(LONG_MIN+1) */ -+ if (mpfr_nan_p (x)) -+ { -+ printf ("Error in pow_si(2, LONG_MIN+1): got NaN\n"); -+ exit (1); -+ } -+ if (LONG_MIN + 2 < mpfr_get_emin ()) -+ { -+ MPFR_ASSERTN (mpfr_zero_p (x)); -+ } -+ else -+ { -+ MPFR_ASSERTN (mpfr_cmp_si_2exp (x, 1, LONG_MIN + 1)); -+ } -+ -+ mpfr_set_si_2exp (x, 1, -1, GMP_RNDN); /* 0.5 */ -+ mpfr_pow_si (x, x, LONG_MIN, GMP_RNDN); /* 2^(-LONG_MIN) */ -+ if (LONG_MIN < 1 - mpfr_get_emax ()) /* 1 - LONG_MIN > emax */ -+ { -+ MPFR_ASSERTN (mpfr_inf_p (x)); -+ } -+ else -+ { -+ MPFR_ASSERTN (mpfr_cmp_si_2exp (x, 2, - (LONG_MIN + 1))); -+ } -+ - mpfr_clear (x); - } - -@@ -270,6 +320,35 @@ - } - - static void -+pow_si_long_min (void) -+{ -+ mpfr_t x, y, z; -+ int inex; -+ -+ mpfr_inits2 (sizeof(long) * CHAR_BIT + 32, x, y, z, (void *) 0); -+ mpfr_set_si_2exp (x, 3, -1, GMP_RNDN); /* 1.5 */ -+ -+ inex = mpfr_set_si (y, LONG_MIN, GMP_RNDN); -+ MPFR_ASSERTN (inex == 0); -+ mpfr_nextbelow (y); -+ mpfr_pow (y, x, y, GMP_RNDD); -+ -+ inex = mpfr_set_si (z, LONG_MIN, GMP_RNDN); -+ MPFR_ASSERTN (inex == 0); -+ mpfr_nextabove (z); -+ mpfr_pow (z, x, z, GMP_RNDU); -+ -+ mpfr_pow_si (x, x, LONG_MIN, GMP_RNDN); /* 1.5^LONG_MIN */ -+ if (mpfr_cmp (x, y) < 0 || mpfr_cmp (x, z) > 0) -+ { -+ printf ("Error in pow_si_long_min\n"); -+ exit (1); -+ } -+ -+ mpfr_clears (x, y, z, (void *) 0); -+} -+ -+static void - check_inexact (mp_prec_t p) - { - mpfr_t x, y, z, t; -@@ -751,6 +830,7 @@ - check_pow_ui (); - check_pow_si (); - check_special_pow_si (); -+ pow_si_long_min (); - for (p = 2; p < 100; p++) - check_inexact (p); - underflows (); -diff -Naurd mpfr-2.2.1-p3/version.c mpfr-2.2.1-p4/version.c ---- mpfr-2.2.1-p3/version.c 2007-02-15 23:40:49.000000000 +0000 -+++ mpfr-2.2.1-p4/version.c 2007-02-15 23:43:29.000000000 +0000 -@@ -24,5 +24,5 @@ - const char * - mpfr_get_version (void) - { -- return "2.2.1-p3"; -+ return "2.2.1-p4"; - } -diff -Naurd mpfr-2.2.1-p4/VERSION mpfr-2.2.1-p5/VERSION ---- mpfr-2.2.1-p4/VERSION 2007-02-15 23:43:29.000000000 +0000 -+++ mpfr-2.2.1-p5/VERSION 2007-02-15 23:46:49.000000000 +0000 -@@ -1 +1 @@ --2.2.1-p4 -+2.2.1-p5 -diff -Naurd mpfr-2.2.1-p4/mpfr.h mpfr-2.2.1-p5/mpfr.h ---- mpfr-2.2.1-p4/mpfr.h 2007-02-15 23:43:29.000000000 +0000 -+++ mpfr-2.2.1-p5/mpfr.h 2007-02-15 23:46:49.000000000 +0000 -@@ -26,7 +26,7 @@ - #define MPFR_VERSION_MAJOR 2 - #define MPFR_VERSION_MINOR 2 - #define MPFR_VERSION_PATCHLEVEL 1 --#define MPFR_VERSION_STRING "2.2.1-p4" -+#define MPFR_VERSION_STRING "2.2.1-p5" - - /* Macros dealing with MPFR VERSION */ - #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -diff -Naurd mpfr-2.2.1-p4/mpfr.info mpfr-2.2.1-p5/mpfr.info ---- mpfr-2.2.1-p4/mpfr.info 2006-11-29 09:51:26.000000000 +0000 -+++ mpfr-2.2.1-p5/mpfr.info 2007-02-15 23:46:21.000000000 +0000 -@@ -1,10 +1,10 @@ - This is mpfr.info, produced by makeinfo version 4.8 from mpfr.texi. - - This manual documents how to install and use the Multiple Precision --Floating-Point Reliable Library, version 2.2.1. -+Floating-Point Reliable Library, version 2.2.2-p5. - - Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, --2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -+2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation License, Version -@@ -26,10 +26,10 @@ - **** - - This manual documents how to install and use the Multiple Precision --Floating-Point Reliable Library, version 2.2.1. -+Floating-Point Reliable Library, version 2.2.2-p5. - - Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, --2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -+2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation License, Version -@@ -173,7 +173,7 @@ - This will copy the files `mpfr.h' and `mpf2mpfr.h' to the directory - `/usr/local/include', the file `libmpfr.a' to the directory - `/usr/local/lib', and the file `mpfr.info' to the directory -- `/usr/local/info' (or if you passed the `--prefix' option to -+ `/usr/local/share/info' (or if you passed the `--prefix' option to - `configure', using the prefix directory given as argument to - `--prefix' instead of `/usr/local'). - -@@ -396,6 +396,53 @@ - should return an overflow or an underflow if `1' is not representable - in the current exponent range. - -+4.5 Exceptions -+============== -+ -+MPFR supports 5 exception types: -+ -+ * Underflow: An underflow occurs when the exact result of a function -+ is a non-zero real number and the result obtained after the -+ rounding, assuming an unbounded exponent range (for the rounding), -+ has an exponent smaller than the minimum exponent of the current -+ range. In the round-to-nearest mode, the halfway case is rounded -+ toward zero. -+ -+ Note: This is not the single definition of the underflow. MPFR -+ chooses to consider the underflow after rounding. The underflow -+ before rounding can also be defined. For instance, consider a -+ function that has the exact result 7 multiplied by two to the power -+ E-4, where E is the smallest exponent (for a mantissa between 1/2 -+ and 1) in the current range, with a 2-bit target precision and -+ rounding towards plus infinity. The exact result has the exponent -+ E-1. With the underflow before rounding, such a function call -+ would yield an underflow, as E-1 is outside the current exponent -+ range. However, MPFR first considers the rounded result assuming -+ an unbounded exponent range. The exact result cannot be -+ represented exactly in precision 2, and here, it is rounded to 0.5 -+ times 2 to E, which is representable in the current exponent -+ range. As a consequence, this will not yield an underflow in MPFR. -+ -+ * Overflow: An overflow occurs when the exact result of a function -+ is a non-zero real number and the result obtained after the -+ rounding, assuming an unbounded exponent range (for the rounding), -+ has an exponent larger than the maximum exponent of the current -+ range. In the round-to-nearest mode, the result is infinite. -+ -+ * Invalid (NaN): An invalid (or NaN) exception occurs when the -+ result of a function is a NaN. -+ -+ * Inexact: An inexact exception occurs when the result of a function -+ cannot be represented exactly and must be rounded. -+ -+ * Range error: A range exception occurs when a function that does -+ not return a MPFR number (such as comparisons and conversions to -+ an integer) has an invalid result. -+ -+ -+ MPFR has a global flag for each exception, which can be cleared, set -+or tested by functions described in *Note Exceptions::. -+ -  - File: mpfr.info, Node: MPFR Interface, Next: Contributors, Prev: MPFR Basics, Up: Top - -@@ -950,6 +997,12 @@ - Set ROP to the absolute value of OP, rounded in the direction RND. - Just changes the sign if ROP and OP are the same variable. - -+ -- Function: int mpfr_dim (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2, -+ mp_rnd_t RND) -+ Set ROP to the positive difference of OP1 and OP2, i.e., OP1 - OP2 -+ rounded in the direction RND if OP1 > OP2, and +0 otherwise. -+ Returns NaN when OP1 or OP2 is NaN. -+ - -- Function: int mpfr_mul_2ui (mpfr_t ROP, mpfr_t OP1, unsigned long - int OP2, mp_rnd_t RND) - -- Function: int mpfr_mul_2si (mpfr_t ROP, mpfr_t OP1, long int OP2, -@@ -1873,9 +1926,12 @@ - Meunier helped in the design of the `mpfr_erf' code. - - The development of the MPFR library would not have been possible --without the continuous support of LORIA, INRIA and INRIA Lorraine. The --development of MPFR was also supported by a grant (202F0659 00 MPN 121) --from the Conseil R�gional de Lorraine in 2002. -+without the continuous support of INRIA, and of the LORIA and LIP -+laboratories. In particular the main authors were or are members of the -+PolKA, Spaces, Cacao project-teams at LORIA (Nancy, France) and of the -+Arenaire project-team at LIP (Lyon, France). The development of MPFR -+was also supported by a grant (202F0659 00 MPN 121) from the Conseil -+R�gional de Lorraine in 2002. - -  - File: mpfr.info, Node: References, Next: GNU Free Documentation License, Prev: Contributors, Up: Top -@@ -2387,8 +2443,8 @@ - * Precision <1>: MPFR Interface. (line 20) - * Precision: MPFR Basics. (line 26) - * Reporting bugs: Reporting Bugs. (line 6) --* Rounding Modes <1>: Rounding Modes. (line 6) --* Rounding Modes: MPFR Basics. (line 32) -+* Rounding Modes <1>: MPFR Basics. (line 32) -+* Rounding Modes: Rounding Modes. (line 6) - * Special functions: Special Functions. (line 6) - -  -@@ -2477,14 +2533,16 @@ - * mpfr_custom_init_set: Custom Interface. (line 47) - * mpfr_custom_move: Custom Interface. (line 84) - * MPFR_DECL_INIT: Advanced Functions. (line 10) -+* mpfr_dim: Basic Arithmetic Functions. -+ (line 155) - * mpfr_div: Basic Arithmetic Functions. - (line 58) - * mpfr_div_2exp: Compatibility with MPF. - (line 47) - * mpfr_div_2si: Basic Arithmetic Functions. -- (line 164) -+ (line 170) - * mpfr_div_2ui: Basic Arithmetic Functions. -- (line 162) -+ (line 168) - * mpfr_div_q: Basic Arithmetic Functions. - (line 70) - * mpfr_div_si: Basic Arithmetic Functions. -@@ -2625,9 +2683,9 @@ - * mpfr_mul_2exp: Compatibility with MPF. - (line 45) - * mpfr_mul_2si: Basic Arithmetic Functions. -- (line 157) -+ (line 163) - * mpfr_mul_2ui: Basic Arithmetic Functions. -- (line 155) -+ (line 161) - * mpfr_mul_q: Basic Arithmetic Functions. - (line 48) - * mpfr_mul_si: Basic Arithmetic Functions. -@@ -2808,33 +2866,33 @@ - -  - Tag Table: --Node: Top949 --Node: Copying2260 --Node: Introduction to MPFR3977 --Node: Installing MPFR5675 --Node: Reporting Bugs8343 --Node: MPFR Basics9895 --Node: MPFR Interface16074 --Node: Initialization Functions18238 --Node: Assignment Functions21660 --Node: Combined Initialization and Assignment Functions28550 --Node: Conversion Functions29832 --Node: Basic Arithmetic Functions35481 --Node: Comparison Functions42745 --Node: Special Functions46215 --Node: Input and Output Functions55364 --Node: Integer Related Functions57300 --Node: Miscellaneous Functions60294 --Node: Rounding Modes64675 --Node: Exceptions66024 --Node: Advanced Functions71338 --Node: Compatibility with MPF73943 --Node: Custom Interface76212 --Node: Internals80255 --Node: Contributors82275 --Node: References84024 --Node: GNU Free Documentation License84769 --Node: Concept Index107212 --Node: Function Index111074 -+Node: Top958 -+Node: Copying2278 -+Node: Introduction to MPFR3995 -+Node: Installing MPFR5693 -+Node: Reporting Bugs8367 -+Node: MPFR Basics9919 -+Node: MPFR Interface18384 -+Node: Initialization Functions20548 -+Node: Assignment Functions23970 -+Node: Combined Initialization and Assignment Functions30860 -+Node: Conversion Functions32142 -+Node: Basic Arithmetic Functions37791 -+Node: Comparison Functions45323 -+Node: Special Functions48793 -+Node: Input and Output Functions57942 -+Node: Integer Related Functions59878 -+Node: Miscellaneous Functions62872 -+Node: Rounding Modes67253 -+Node: Exceptions68602 -+Node: Advanced Functions73916 -+Node: Compatibility with MPF76521 -+Node: Custom Interface78790 -+Node: Internals82833 -+Node: Contributors84853 -+Node: References86790 -+Node: GNU Free Documentation License87535 -+Node: Concept Index109978 -+Node: Function Index113840 -  - End Tag Table -diff -Naurd mpfr-2.2.1-p4/mpfr.texi mpfr-2.2.1-p5/mpfr.texi ---- mpfr-2.2.1-p4/mpfr.texi 2006-11-29 09:49:47.000000000 +0000 -+++ mpfr-2.2.1-p5/mpfr.texi 2007-02-15 23:46:09.000000000 +0000 -@@ -2,8 +2,8 @@ - @c %**start of header - @setfilename mpfr.info - @documentencoding ISO-8859-1 --@set VERSION 2.2.1 --@set UPDATED-MONTH November 2006 -+@set VERSION 2.2.2-p5 -+@set UPDATED-MONTH February 2007 - @settitle MPFR @value{VERSION} - @synindex tp fn - @iftex -@@ -15,7 +15,7 @@ - This manual documents how to install and use the Multiple Precision - Floating-Point Reliable Library, version @value{VERSION}. - --Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -+Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document under - the terms of the GNU Free Documentation License, Version 1.1 or any later -@@ -312,7 +312,7 @@ - This will copy the files @file{mpfr.h} and @file{mpf2mpfr.h} to the directory - @file{/usr/local/include}, the file @file{libmpfr.a} to the directory - @file{/usr/local/lib}, and the file @file{mpfr.info} to the directory --@file{/usr/local/info} (or if you passed the @samp{--prefix} option to -+@file{/usr/local/share/info} (or if you passed the @samp{--prefix} option to - @file{configure}, using the prefix directory given as argument to - @samp{--prefix} instead of @file{/usr/local}). - @end enumerate -@@ -559,6 +559,61 @@ - for special cases (like @code{acos(0)}) should return an overflow or - an underflow if @code{1} is not representable in the current exponent range. - -+@section Exceptions -+ -+MPFR supports 5 exception types: -+ -+@itemize @bullet -+ -+@item Underflow: -+An underflow occurs when the exact result of a function is a non-zero -+real number and the result obtained after the rounding, assuming an -+unbounded exponent range (for the rounding), has an exponent smaller -+than the minimum exponent of the current range. In the round-to-nearest -+mode, the halfway case is rounded toward zero. -+ -+Note: This is not the single definition of the underflow. MPFR chooses -+to consider the underflow after rounding. The underflow before rounding -+can also be defined. For instance, consider a function that has the -+exact result @m{7 \times 2^{e-4}, 7 multiplied by two to the power -+@var{e}@minus{}4}, where @var{e} is the smallest exponent (for a -+mantissa between 1/2 and 1) in the current -+range, with a 2-bit target precision and rounding towards plus infinity. -+The exact result has the exponent @var{e}@minus{}1. With the underflow -+before rounding, such a function call would yield an underflow, as -+@var{e}@minus{}1 is outside the current exponent range. However, MPFR -+first considers the rounded result assuming an unbounded exponent range. -+The exact result cannot be represented exactly in precision 2, and here, -+it is rounded to @m{0.5 @times 2^e, 0.5 times 2 to @var{e}}, which is -+representable in the current exponent range. As a consequence, this will -+not yield an underflow in MPFR. -+ -+@item Overflow: -+An overflow occurs when the exact result of a function is a non-zero -+real number and the result obtained after the rounding, assuming an -+unbounded exponent range (for the rounding), has an exponent larger -+than the maximum exponent of the current range. In the round-to-nearest -+mode, the result is infinite. -+ -+@item Invalid (NaN): -+An invalid (or NaN) exception occurs when the result of a function is -+a NaN. -+@c NaN is defined above. So, we don't say anything more. -+ -+@item Inexact: -+An inexact exception occurs when the result of a function cannot be -+represented exactly and must be rounded. -+ -+@item Range error: -+A range exception occurs when a function that does not return a MPFR -+number (such as comparisons and conversions to an integer) has an -+invalid result. -+ -+@end itemize -+ -+MPFR has a global flag for each exception, which can be cleared, set -+or tested by functions described in @ref{Exceptions}. -+ - @node MPFR Interface, Contributors, MPFR Basics, Top - @comment node-name, next, previous, up - @chapter MPFR Interface -@@ -1130,6 +1185,13 @@ - Just changes the sign if @var{rop} and @var{op} are the same variable. - @end deftypefun - -+@deftypefun int mpfr_dim (mpfr_t @var{rop}, mpfr_t @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd}) -+Set @var{rop} to the positive difference of @var{op1} and @var{op2}, i.e., -+@math{@var{op1} - @var{op2}} rounded in the direction @var{rnd} -+if @math{@var{op1} > @var{op2}}, and +0 otherwise. -+Returns NaN when @var{op1} or @var{op2} is NaN. -+@end deftypefun -+ - @deftypefun int mpfr_mul_2ui (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd}) - @deftypefunx int mpfr_mul_2si (mpfr_t @var{rop}, mpfr_t @var{op1}, long int @var{op2}, mp_rnd_t @var{rnd}) - Set @var{rop} to @m{@var{op1} \times 2^{op2}, @var{op1} times 2 raised -@@ -2196,7 +2258,10 @@ - Ludovic Meunier helped in the design of the @code{mpfr_erf} code. - - The development of the MPFR library would not have been possible without the --continuous support of LORIA, INRIA and INRIA Lorraine. -+continuous support of INRIA, and of the LORIA and LIP laboratories. -+In particular the main authors were or are members of the -+PolKA, Spaces, Cacao project-teams at LORIA (Nancy, France) -+and of the Arenaire project-team at LIP (Lyon, France). - The development of MPFR was also supported by a grant - (202F0659 00 MPN 121) from the Conseil R@'egional de Lorraine in 2002. - -diff -Naurd mpfr-2.2.1-p4/version.c mpfr-2.2.1-p5/version.c ---- mpfr-2.2.1-p4/version.c 2007-02-15 23:43:29.000000000 +0000 -+++ mpfr-2.2.1-p5/version.c 2007-02-15 23:46:49.000000000 +0000 -@@ -24,5 +24,5 @@ - const char * - mpfr_get_version (void) - { -- return "2.2.1-p4"; -+ return "2.2.1-p5"; - } diff --git a/mpfr-2.3.0-upstream.patch b/mpfr-2.3.0-upstream.patch new file mode 100644 index 0000000..f724e1e --- /dev/null +++ b/mpfr-2.3.0-upstream.patch @@ -0,0 +1,223 @@ +diff -Naurd mpfr-2.3.0-a/Makefile.am mpfr-2.3.0-b/Makefile.am +--- mpfr-2.3.0-a/Makefile.am 2007-08-29 10:18:11.000000000 +0000 ++++ mpfr-2.3.0-b/Makefile.am 2007-09-02 23:19:32.000000000 +0000 +@@ -32,8 +32,13 @@ + + MAKEINFOFLAGS = --enable-encoding + +-get_patches.c: PATCHES get_patches.sh +- ./get_patches.sh > $@ || rm -f $@ ++# Important note: If for some reason, srcdir is read-only at build time ++# (and you use objdir != srcdir), then you need to rebuild get_patches.c ++# (with "make get_patches.c") just after patching the MPFR source. This ++# should not be a problem in practice, in particular because "make dist" ++# automatically rebuilds get_patches.c before generating the archives. ++$(srcdir)/get_patches.c: PATCHES get_patches.sh ++ (cd $(srcdir) && ./get_patches.sh) > $@ || rm -f $@ + + # Do not add get_patches.c to CLEANFILES so that this file doesn't + # need to be (re)built as long as no patches are applied. Anyway the +diff -Naurd mpfr-2.3.0-a/Makefile.in mpfr-2.3.0-b/Makefile.in +--- mpfr-2.3.0-a/Makefile.in 2007-08-29 10:27:18.000000000 +0000 ++++ mpfr-2.3.0-b/Makefile.in 2007-09-02 23:59:30.000000000 +0000 +@@ -1665,8 +1665,13 @@ + uninstall-info-am uninstall-libLTLIBRARIES + + +-get_patches.c: PATCHES get_patches.sh +- ./get_patches.sh > $@ || rm -f $@ ++# Important note: If for some reason, srcdir is read-only at build time ++# (and you use objdir != srcdir), then you need to rebuild get_patches.c ++# (with "make get_patches.c") just after patching the MPFR source. This ++# should not be a problem in practice, in particular because "make dist" ++# automatically rebuilds get_patches.c before generating the archives. ++$(srcdir)/get_patches.c: PATCHES get_patches.sh ++ (cd $(srcdir) && ./get_patches.sh) > $@ || rm -f $@ + + tune: + $(MAKE) $(AM_MAKEFLAGS) tuneup$(EXEEXT) +diff -Naurd mpfr-2.3.0-a/PATCHES mpfr-2.3.0-b/PATCHES +--- mpfr-2.3.0-a/PATCHES 2007-08-29 10:18:11.000000000 +0000 ++++ mpfr-2.3.0-b/PATCHES 2007-09-02 23:59:50.000000000 +0000 +@@ -0,0 +1 @@ ++get_patches +diff -Naurd mpfr-2.3.0-a/VERSION mpfr-2.3.0-b/VERSION +--- mpfr-2.3.0-a/VERSION 2007-08-29 10:18:11.000000000 +0000 ++++ mpfr-2.3.0-b/VERSION 2007-09-02 23:55:55.000000000 +0000 +@@ -1 +1 @@ +-2.3.0 ++2.3.0-p1 +diff -Naurd mpfr-2.3.0-a/mpfr.h mpfr-2.3.0-b/mpfr.h +--- mpfr-2.3.0-a/mpfr.h 2007-08-29 10:18:11.000000000 +0000 ++++ mpfr-2.3.0-b/mpfr.h 2007-09-02 23:55:55.000000000 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 2 + #define MPFR_VERSION_MINOR 3 + #define MPFR_VERSION_PATCHLEVEL 0 +-#define MPFR_VERSION_STRING "2.3.0" ++#define MPFR_VERSION_STRING "2.3.0-p1" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-2.3.0-a/tests/tversion.c mpfr-2.3.0-b/tests/tversion.c +--- mpfr-2.3.0-a/tests/tversion.c 2007-08-29 10:18:10.000000000 +0000 ++++ mpfr-2.3.0-b/tests/tversion.c 2007-09-02 23:55:55.000000000 +0000 +@@ -46,7 +46,7 @@ + version = mpfr_get_version (); + + /* This test is disabled when a suffix (e.g. -dev) has been defined. */ +-#if 1 ++#if 0 + sprintf (buffer, "%d.%d.%d", MPFR_VERSION_MAJOR, MPFR_VERSION_MINOR, + MPFR_VERSION_PATCHLEVEL); + if (strcmp (buffer, version) != 0) +diff -Naurd mpfr-2.3.0-a/version.c mpfr-2.3.0-b/version.c +--- mpfr-2.3.0-a/version.c 2007-08-29 10:18:11.000000000 +0000 ++++ mpfr-2.3.0-b/version.c 2007-09-02 23:55:55.000000000 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "2.3.0"; ++ return "2.3.0-p1"; + } +diff -Naurd mpfr-2.3.0-a/PATCHES mpfr-2.3.0-b/PATCHES +--- mpfr-2.3.0-a/PATCHES 2007-08-29 10:18:11.000000000 +0000 ++++ mpfr-2.3.0-b/PATCHES 2007-09-03 00:03:46.000000000 +0000 +@@ -0,0 +1 @@ ++mpfr_acosh +diff -Naurd mpfr-2.3.0-a/VERSION mpfr-2.3.0-b/VERSION +--- mpfr-2.3.0-a/VERSION 2007-09-02 23:55:55.000000000 +0000 ++++ mpfr-2.3.0-b/VERSION 2007-09-03 00:02:12.000000000 +0000 +@@ -1 +1 @@ +-2.3.0-p1 ++2.3.0-p2 +diff -Naurd mpfr-2.3.0-a/acosh.c mpfr-2.3.0-b/acosh.c +--- mpfr-2.3.0-a/acosh.c 2007-08-29 10:18:11.000000000 +0000 ++++ mpfr-2.3.0-b/acosh.c 2007-08-31 17:20:08.000000000 +0000 +@@ -73,7 +73,7 @@ + /* Declaration of the size variables */ + mp_prec_t Ny = MPFR_PREC(y); /* Precision of output variable */ + mp_prec_t Nt; /* Precision of the intermediary variable */ +- mp_exp_t err, exp_te, exp_ti; /* Precision of error */ ++ mp_exp_t err, exp_te, d; /* Precision of error */ + MPFR_ZIV_DECL (loop); + + /* compute the precision of intermediary variable */ +@@ -91,13 +91,35 @@ + mpfr_mul (t, x, x, GMP_RNDD); /* x^2 */ + exp_te = MPFR_GET_EXP (t); + mpfr_sub_ui (t, t, 1, GMP_RNDD); /* x^2-1 */ +- exp_ti = MPFR_GET_EXP (t); +- mpfr_sqrt (t, t, GMP_RNDN); /* sqrt(x^2-1) */ +- mpfr_add (t, t, x, GMP_RNDN); /* sqrt(x^2-1)+x */ +- mpfr_log (t, t, GMP_RNDN); /* ln(sqrt(x^2-1)+x)*/ ++ if (MPFR_UNLIKELY (MPFR_IS_ZERO (t))) ++ { ++ mpfr_t z; ++ ++ /* This means that x is very close to 1: x = 1 + z with ++ z < 2^(-Nt). Instead of increasing the precision, let's ++ compute x^2-1 by (x+1)(x-1) with an accuracy of about ++ Nt bits. */ ++ mpfr_init2 (z, Nt); ++ mpfr_add_ui (t, x, 1, GMP_RNDD); ++ mpfr_sub_ui (z, x, 1, GMP_RNDD); ++ mpfr_mul (t, t, z, GMP_RNDD); ++ d = 2; ++ mpfr_sqrt (t, t, GMP_RNDN); /* sqrt(x^2-1) */ ++ mpfr_add (t, t, z, GMP_RNDN); /* sqrt(x^2-1)+z */ ++ mpfr_clear (z); ++ mpfr_log1p (t, t, GMP_RNDN); /* log1p(sqrt(x^2-1)+z) */ ++ } ++ else ++ { ++ d = exp_te - MPFR_GET_EXP (t); ++ d = MAX (1, d); ++ mpfr_sqrt (t, t, GMP_RNDN); /* sqrt(x^2-1) */ ++ mpfr_add (t, t, x, GMP_RNDN); /* sqrt(x^2-1)+x */ ++ mpfr_log (t, t, GMP_RNDN); /* ln(sqrt(x^2-1)+x) */ ++ } + + /* error estimate -- see algorithms.tex */ +- err = 3 + MAX (1, exp_te - exp_ti) - MPFR_GET_EXP(t); ++ err = 3 + d - MPFR_GET_EXP (t); + /* error is bounded by 1/2 + 2^err <= 2^(1+max(-1,err)) */ + err = 1 + MAX (-1, err); + if (MPFR_LIKELY (MPFR_CAN_ROUND (t, Nt - err, Ny, rnd_mode))) +@@ -117,9 +139,3 @@ + MPFR_SAVE_EXPO_FREE (expo); + return mpfr_check_range (y, inexact, rnd_mode); + } +- +- +- +- +- +- +diff -Naurd mpfr-2.3.0-a/mpfr.h mpfr-2.3.0-b/mpfr.h +--- mpfr-2.3.0-a/mpfr.h 2007-09-02 23:55:55.000000000 +0000 ++++ mpfr-2.3.0-b/mpfr.h 2007-09-03 00:02:12.000000000 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 2 + #define MPFR_VERSION_MINOR 3 + #define MPFR_VERSION_PATCHLEVEL 0 +-#define MPFR_VERSION_STRING "2.3.0-p1" ++#define MPFR_VERSION_STRING "2.3.0-p2" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-2.3.0-a/tests/tacosh.c mpfr-2.3.0-b/tests/tacosh.c +--- mpfr-2.3.0-a/tests/tacosh.c 2007-08-29 10:18:10.000000000 +0000 ++++ mpfr-2.3.0-b/tests/tacosh.c 2007-08-31 17:20:00.000000000 +0000 +@@ -123,12 +123,40 @@ + mpfr_clear (y); + } + ++/* With MPFR 2.3.0, this yields an assertion failure in mpfr_acosh. */ ++static void ++bug20070831 (void) ++{ ++ mpfr_t x, y, z; ++ int inex; ++ ++ mpfr_init2 (x, 256); ++ mpfr_init2 (y, 32); ++ mpfr_init2 (z, 32); ++ mpfr_set_ui (x, 1, GMP_RNDN); ++ mpfr_nextabove (x); ++ inex = mpfr_acosh (y, x, GMP_RNDZ); ++ mpfr_set_ui_2exp (z, 1, -127, GMP_RNDN); ++ mpfr_nextbelow (z); ++ MPFR_ASSERTN (inex < 0); ++ if (!mpfr_equal_p (y, z)) ++ { ++ printf ("Error in bug20070831:\nexpected "); ++ mpfr_dump (z); ++ printf ("got "); ++ mpfr_dump (y); ++ exit (1); ++ } ++ mpfr_clears (x, y, z, (void *) 0); ++} ++ + int + main (int argc, char *argv[]) + { + tests_start_mpfr (); + + special (); ++ bug20070831 (); + + test_generic (2, 100, 25); + +diff -Naurd mpfr-2.3.0-a/version.c mpfr-2.3.0-b/version.c +--- mpfr-2.3.0-a/version.c 2007-09-02 23:55:55.000000000 +0000 ++++ mpfr-2.3.0-b/version.c 2007-09-03 00:02:12.000000000 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "2.3.0-p1"; ++ return "2.3.0-p2"; + } diff --git a/mpfr.spec b/mpfr.spec index 9e68486..c2b40e0 100644 --- a/mpfr.spec +++ b/mpfr.spec @@ -1,10 +1,10 @@ Summary: A C library for multiple-precision floating-point computations Name: mpfr -Version: 2.2.1 -Release: 2%{dist} +Version: 2.3.0 +Release: 1%{dist} URL: http://www.mpfr.org/ Source0: http://www.mpfr.org/mpfr-current/mpfr-%{version}.tar.bz2 -Patch0: mpfr-2.2.1-upstream.patch +Patch0: mpfr-2.3.0-upstream.patch License: LGPLv2+ and GPLv2+ and GFDL Group: System Environment/Libraries BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -41,7 +41,7 @@ install the mpfr package. %build -%configure --disable-assert --enable-shared +%configure --disable-assert make %{?_smp_mflags} %install @@ -85,6 +85,10 @@ rm -rf $RPM_BUILD_ROOT %{_infodir}/mpfr.info* %changelog +* Thu Sep 20 2007 Ivana Varekova 2.3.0-1 +- update to 2.3.0 +- fix license flag + * Mon Aug 20 2007 Ivana Varekova 2.2.1-2 - spec file cleanup (#253440) diff --git a/sources b/sources index fc5f163..4b28552 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -40bf06f8081461d8db7d6f4ad5b9f6bd mpfr-2.2.1.tar.bz2 +cf7c743e4be122e63eb6f372fc58b657 mpfr-2.3.0.tar.bz2