Add upstream patches 8-9.
This commit is contained in:
parent
9acef3eea7
commit
d89286dc3e
251
allpatches
251
allpatches
@ -1579,3 +1579,254 @@ diff -Naurd mpfr-4.1.0-a/tests/tj0.c mpfr-4.1.0-b/tests/tj0.c
|
||||
mpfr_init (x);
|
||||
mpfr_init (y);
|
||||
|
||||
diff -Naurd mpfr-4.1.0-a/PATCHES mpfr-4.1.0-b/PATCHES
|
||||
--- mpfr-4.1.0-a/PATCHES 2021-02-17 17:22:34.594973310 +0000
|
||||
+++ mpfr-4.1.0-b/PATCHES 2021-02-17 17:22:34.702972090 +0000
|
||||
@@ -0,0 +1 @@
|
||||
+digamma-interm-zero2
|
||||
diff -Naurd mpfr-4.1.0-a/VERSION mpfr-4.1.0-b/VERSION
|
||||
--- mpfr-4.1.0-a/VERSION 2021-02-11 12:53:38.426850512 +0000
|
||||
+++ mpfr-4.1.0-b/VERSION 2021-02-17 17:22:34.702972090 +0000
|
||||
@@ -1 +1 @@
|
||||
-4.1.0-p7
|
||||
+4.1.0-p8
|
||||
diff -Naurd mpfr-4.1.0-a/src/digamma.c mpfr-4.1.0-b/src/digamma.c
|
||||
--- mpfr-4.1.0-a/src/digamma.c 2021-02-11 12:52:52.547350357 +0000
|
||||
+++ mpfr-4.1.0-b/src/digamma.c 2021-02-17 17:22:34.690972226 +0000
|
||||
@@ -173,16 +173,19 @@
|
||||
mpfr_digamma (v, u, MPFR_RNDN); /* error <= 1/2 ulp */
|
||||
expv = MPFR_GET_EXP (v);
|
||||
mpfr_sub (v, v, t, MPFR_RNDN);
|
||||
- if (MPFR_GET_EXP (v) < MPFR_GET_EXP (t))
|
||||
- e1 += MPFR_EXP(t) - MPFR_EXP(v); /* scale error for t wrt new v */
|
||||
- /* now take into account the 1/2 ulp error for v */
|
||||
- if (expv - MPFR_EXP(v) - 1 > e1)
|
||||
- e1 = expv - MPFR_EXP(v) - 1;
|
||||
- else
|
||||
- e1 ++;
|
||||
- e1 ++; /* rounding error for mpfr_sub */
|
||||
- if (MPFR_CAN_ROUND (v, p - e1, MPFR_PREC(y), rnd_mode))
|
||||
- break;
|
||||
+ if (MPFR_NOTZERO(v))
|
||||
+ {
|
||||
+ if (MPFR_GET_EXP (v) < MPFR_GET_EXP (t))
|
||||
+ e1 += MPFR_EXP(t) - MPFR_EXP(v); /* scale error for t wrt new v */
|
||||
+ /* now take into account the 1/2 ulp error for v */
|
||||
+ if (expv - MPFR_EXP(v) - 1 > e1)
|
||||
+ e1 = expv - MPFR_EXP(v) - 1;
|
||||
+ else
|
||||
+ e1 ++;
|
||||
+ e1 ++; /* rounding error for mpfr_sub */
|
||||
+ if (MPFR_CAN_ROUND (v, p - e1, MPFR_PREC(y), rnd_mode))
|
||||
+ break;
|
||||
+ }
|
||||
MPFR_ZIV_NEXT (loop, p);
|
||||
mpfr_set_prec (t, p);
|
||||
mpfr_set_prec (v, p);
|
||||
@@ -416,10 +419,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (MPFR_IS_NEG(x))
|
||||
- inex = mpfr_digamma_reflection (y, x, rnd_mode);
|
||||
/* if x < 1/2 we use the reflection formula */
|
||||
- else if (MPFR_EXP(x) < 0)
|
||||
+ if (MPFR_IS_NEG(x) || MPFR_EXP(x) < 0)
|
||||
inex = mpfr_digamma_reflection (y, x, rnd_mode);
|
||||
else
|
||||
inex = mpfr_digamma_positive (y, x, rnd_mode);
|
||||
diff -Naurd mpfr-4.1.0-a/src/mpfr.h mpfr-4.1.0-b/src/mpfr.h
|
||||
--- mpfr-4.1.0-a/src/mpfr.h 2021-02-11 12:53:38.422850555 +0000
|
||||
+++ mpfr-4.1.0-b/src/mpfr.h 2021-02-17 17:22:34.702972090 +0000
|
||||
@@ -27,7 +27,7 @@
|
||||
#define MPFR_VERSION_MAJOR 4
|
||||
#define MPFR_VERSION_MINOR 1
|
||||
#define MPFR_VERSION_PATCHLEVEL 0
|
||||
-#define MPFR_VERSION_STRING "4.1.0-p7"
|
||||
+#define MPFR_VERSION_STRING "4.1.0-p8"
|
||||
|
||||
/* User macros:
|
||||
MPFR_USE_FILE: Define it to make MPFR define functions dealing
|
||||
diff -Naurd mpfr-4.1.0-a/src/version.c mpfr-4.1.0-b/src/version.c
|
||||
--- mpfr-4.1.0-a/src/version.c 2021-02-11 12:53:38.426850512 +0000
|
||||
+++ mpfr-4.1.0-b/src/version.c 2021-02-17 17:22:34.702972090 +0000
|
||||
@@ -25,5 +25,5 @@
|
||||
const char *
|
||||
mpfr_get_version (void)
|
||||
{
|
||||
- return "4.1.0-p7";
|
||||
+ return "4.1.0-p8";
|
||||
}
|
||||
diff -Naurd mpfr-4.1.0-a/tests/tdigamma.c mpfr-4.1.0-b/tests/tdigamma.c
|
||||
--- mpfr-4.1.0-a/tests/tdigamma.c 2021-02-11 12:52:52.547350357 +0000
|
||||
+++ mpfr-4.1.0-b/tests/tdigamma.c 2021-02-17 17:22:34.690972226 +0000
|
||||
@@ -110,6 +110,26 @@
|
||||
mpfr_clear (y);
|
||||
}
|
||||
|
||||
+/* another test that fails with GMP_CHECK_RANDOMIZE=1613197421465830
|
||||
+ on revision 14429 */
|
||||
+static void
|
||||
+bug20210215 (void)
|
||||
+{
|
||||
+ mpfr_t x, y;
|
||||
+ int inex;
|
||||
+
|
||||
+ mpfr_init2 (x, 510);
|
||||
+ mpfr_init2 (y, 4);
|
||||
+ mpfr_set_str (x, "-8.2923051438433494998166335341807999322052669984208422481227138906096000469898717007386115912802685588348601663465077353194268894939972221117314512518182580e+35", 10, MPFR_RNDN);
|
||||
+ mpfr_clear_flags ();
|
||||
+ inex = mpfr_digamma (y, x, MPFR_RNDU);
|
||||
+ MPFR_ASSERTN (mpfr_cmp_ui0 (y, 88) == 0);
|
||||
+ MPFR_ASSERTN (inex > 0);
|
||||
+ MPFR_ASSERTN (__gmpfr_flags == MPFR_FLAGS_INEXACT);
|
||||
+ mpfr_clear (x);
|
||||
+ mpfr_clear (y);
|
||||
+}
|
||||
+
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
@@ -118,6 +138,7 @@
|
||||
special ();
|
||||
bug20210206 ();
|
||||
bug20210208 ();
|
||||
+ bug20210215 ();
|
||||
|
||||
test_generic (MPFR_PREC_MIN, 200, 20);
|
||||
|
||||
diff -Naurd mpfr-4.1.0-a/PATCHES mpfr-4.1.0-b/PATCHES
|
||||
--- mpfr-4.1.0-a/PATCHES 2021-02-17 17:25:46.396981483 +0000
|
||||
+++ mpfr-4.1.0-b/PATCHES 2021-02-17 17:25:46.440981068 +0000
|
||||
@@ -0,0 +1 @@
|
||||
+jyn_asympt-interm-zero
|
||||
diff -Naurd mpfr-4.1.0-a/VERSION mpfr-4.1.0-b/VERSION
|
||||
--- mpfr-4.1.0-a/VERSION 2021-02-17 17:22:34.702972090 +0000
|
||||
+++ mpfr-4.1.0-b/VERSION 2021-02-17 17:25:46.440981068 +0000
|
||||
@@ -1 +1 @@
|
||||
-4.1.0-p8
|
||||
+4.1.0-p9
|
||||
diff -Naurd mpfr-4.1.0-a/src/jyn_asympt.c mpfr-4.1.0-b/src/jyn_asympt.c
|
||||
--- mpfr-4.1.0-a/src/jyn_asympt.c 2021-02-11 12:53:38.410850685 +0000
|
||||
+++ mpfr-4.1.0-b/src/jyn_asympt.c 2021-02-17 17:25:46.424981219 +0000
|
||||
@@ -69,7 +69,7 @@
|
||||
MPFR_ZIV_INIT (loop, w);
|
||||
for (;;)
|
||||
{
|
||||
- int ok = 1;
|
||||
+ int ok = 0;
|
||||
|
||||
mpfr_set_prec (c, w);
|
||||
mpfr_init2 (s, w);
|
||||
@@ -96,10 +96,7 @@
|
||||
|
||||
/* if s or c is zero, MPFR_GET_EXP will fail below */
|
||||
if (MPFR_IS_ZERO(s) || MPFR_IS_ZERO(c))
|
||||
- {
|
||||
- ok = 0;
|
||||
- goto clear;
|
||||
- }
|
||||
+ goto clear; /* with ok=0 */
|
||||
|
||||
/* precompute 1/(8|z|) */
|
||||
mpfr_si_div (iz, MPFR_IS_POS(z) ? 1 : -1, z, MPFR_RNDN); /* err <= 1 */
|
||||
@@ -227,6 +224,9 @@
|
||||
mpfr_sub (s, c, s, MPFR_RNDN);
|
||||
#endif
|
||||
}
|
||||
+ if (MPFR_IS_ZERO(s))
|
||||
+ goto clear; /* with ok=0 */
|
||||
+ ok = 1;
|
||||
if ((n & 2) != 0)
|
||||
mpfr_neg (s, s, MPFR_RNDN);
|
||||
if (MPFR_GET_EXP (s) > err)
|
||||
diff -Naurd mpfr-4.1.0-a/src/mpfr.h mpfr-4.1.0-b/src/mpfr.h
|
||||
--- mpfr-4.1.0-a/src/mpfr.h 2021-02-17 17:22:34.702972090 +0000
|
||||
+++ mpfr-4.1.0-b/src/mpfr.h 2021-02-17 17:25:46.436981105 +0000
|
||||
@@ -27,7 +27,7 @@
|
||||
#define MPFR_VERSION_MAJOR 4
|
||||
#define MPFR_VERSION_MINOR 1
|
||||
#define MPFR_VERSION_PATCHLEVEL 0
|
||||
-#define MPFR_VERSION_STRING "4.1.0-p8"
|
||||
+#define MPFR_VERSION_STRING "4.1.0-p9"
|
||||
|
||||
/* User macros:
|
||||
MPFR_USE_FILE: Define it to make MPFR define functions dealing
|
||||
diff -Naurd mpfr-4.1.0-a/src/version.c mpfr-4.1.0-b/src/version.c
|
||||
--- mpfr-4.1.0-a/src/version.c 2021-02-17 17:22:34.702972090 +0000
|
||||
+++ mpfr-4.1.0-b/src/version.c 2021-02-17 17:25:46.440981068 +0000
|
||||
@@ -25,5 +25,5 @@
|
||||
const char *
|
||||
mpfr_get_version (void)
|
||||
{
|
||||
- return "4.1.0-p8";
|
||||
+ return "4.1.0-p9";
|
||||
}
|
||||
diff -Naurd mpfr-4.1.0-a/tests/mpfr-test.h mpfr-4.1.0-b/tests/mpfr-test.h
|
||||
--- mpfr-4.1.0-a/tests/mpfr-test.h 2020-06-29 13:57:32.000000000 +0000
|
||||
+++ mpfr-4.1.0-b/tests/mpfr-test.h 2021-02-17 17:25:46.424981219 +0000
|
||||
@@ -191,6 +191,8 @@
|
||||
|
||||
#define mpfr_cmp0(x,y) (MPFR_ASSERTN (!MPFR_IS_NAN (x) && !MPFR_IS_NAN (y)), mpfr_cmp (x,y))
|
||||
#define mpfr_cmp_ui0(x,i) (MPFR_ASSERTN (!MPFR_IS_NAN (x)), mpfr_cmp_ui (x,i))
|
||||
+#define mpfr_cmp_si_2exp0(x,i,e) (MPFR_ASSERTN (!MPFR_IS_NAN (x)), \
|
||||
+ mpfr_cmp_si_2exp (x,i,e))
|
||||
|
||||
/* define CHECK_EXTERNAL if you want to check mpfr against another library
|
||||
with correct rounding. You'll probably have to modify mpfr_print_raw()
|
||||
diff -Naurd mpfr-4.1.0-a/tests/tj1.c mpfr-4.1.0-b/tests/tj1.c
|
||||
--- mpfr-4.1.0-a/tests/tj1.c 2020-01-08 18:11:13.000000000 +0000
|
||||
+++ mpfr-4.1.0-b/tests/tj1.c 2021-02-17 17:25:46.424981219 +0000
|
||||
@@ -55,14 +55,14 @@
|
||||
/* since |x| is just above 2^e, |j1(x)| is just above 2^(e-1),
|
||||
thus y should be 2^(e-1) and the inexact flag should be
|
||||
of opposite sign of x */
|
||||
- MPFR_ASSERTN(mpfr_cmp_si_2exp (y, sign, e - 1) == 0);
|
||||
+ MPFR_ASSERTN(mpfr_cmp_si_2exp0 (y, sign, e - 1) == 0);
|
||||
MPFR_ASSERTN(VSIGN (inex) * sign < 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* here |y| should be 0.5*2^emin and the inexact flag should
|
||||
have the sign of x */
|
||||
- MPFR_ASSERTN(mpfr_cmp_si_2exp (y, sign, e) == 0);
|
||||
+ MPFR_ASSERTN(mpfr_cmp_si_2exp0 (y, sign, e) == 0);
|
||||
MPFR_ASSERTN(VSIGN (inex) * sign > 0);
|
||||
}
|
||||
}
|
||||
@@ -72,6 +72,26 @@
|
||||
mpfr_clear (y);
|
||||
}
|
||||
|
||||
+/* a test that fails with GMP_CHECK_RANDOMIZE=1613146232984428
|
||||
+ on revision 14429 */
|
||||
+static void
|
||||
+bug20210215 (void)
|
||||
+{
|
||||
+ mpfr_t x, y;
|
||||
+ int inex;
|
||||
+
|
||||
+ mpfr_init2 (x, 221);
|
||||
+ mpfr_init2 (y, 1);
|
||||
+ mpfr_set_str (x, "1.6484611511696130037307738844228498447763863563070374544054791168614e+01", 10, MPFR_RNDN);
|
||||
+ mpfr_clear_flags ();
|
||||
+ inex = mpfr_j1 (y, x, MPFR_RNDZ);
|
||||
+ MPFR_ASSERTN (mpfr_cmp_si_2exp0 (y, -1, -9) == 0);
|
||||
+ MPFR_ASSERTN (inex > 0);
|
||||
+ MPFR_ASSERTN (__gmpfr_flags == MPFR_FLAGS_INEXACT);
|
||||
+ mpfr_clear (x);
|
||||
+ mpfr_clear (y);
|
||||
+}
|
||||
+
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
@@ -79,6 +99,8 @@
|
||||
|
||||
tests_start_mpfr ();
|
||||
|
||||
+ bug20210215 ();
|
||||
+
|
||||
test_small ();
|
||||
|
||||
mpfr_init (x);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
Summary: C library for multiple-precision floating-point computations
|
||||
Name: mpfr
|
||||
Version: 4.1.0
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
URL: https://www.mpfr.org/
|
||||
|
||||
License: LGPLv3+
|
||||
@ -17,6 +17,8 @@ Source0: https://www.mpfr.org/%{name}-%{version}/%{name}-%{version}.tar.xz
|
||||
# - digamma-hugemem.patch
|
||||
# - digamma-interm-zero.patch
|
||||
# - jn-interm-zero.patch
|
||||
# - digamma-interm-zero2.patch
|
||||
# - jyn-asympt-interm-zero.patch
|
||||
Patch0: https://www.mpfr.org/%{name}-%{version}/allpatches
|
||||
|
||||
# This can be removed when F32 reaches EOL
|
||||
@ -105,6 +107,9 @@ export LD_LIBRARY_PATH=%{buildroot}%{_libdir}
|
||||
%{_infodir}/mpfr.info*
|
||||
|
||||
%changelog
|
||||
* Tue Mar 9 2021 Jerry James <loganjerry@gmail.com> - 4.1.0-5
|
||||
- Add upstream patches 8-9
|
||||
|
||||
* Wed Feb 17 2021 Jerry James <loganjerry@gmail.com> - 4.1.0-4
|
||||
- Add upstream patches 1-7
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user