source:
patches/mpfr-3.1.2-fixes-2.patch@
222ecb1
Last change on this file since 222ecb1 was c8b646b, checked in by , 11 years ago | |
---|---|
|
|
File size: 29.7 KB |
-
mpfr-3.1.
Submitted By: William Harrington (kb0iic at cross-lfs dot org) Date: 2014-03-10 Initial Package Version: 3.1.2 Origin: Upstream Upstream Status: Applied Description: Contains all upstream patches of mpfr current to patch level 5. diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
old new 1 exp_2 -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
old new 1 3.1.2 1 3.1.2-p1 -
src/exp_2.c
diff -Naurd mpfr-3.1.2-a/src/exp_2.c mpfr-3.1.2-b/src/exp_2.c
old new 204 204 for (k = 0; k < K; k++) 205 205 { 206 206 mpz_mul (ss, ss, ss); 207 exps <<= 1;207 exps *= 2; 208 208 exps += mpz_normalize (ss, ss, q); 209 209 } 210 210 mpfr_set_z (s, ss, MPFR_RNDN); -
src/mpfr.h
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
old new 27 27 #define MPFR_VERSION_MAJOR 3 28 28 #define MPFR_VERSION_MINOR 1 29 29 #define MPFR_VERSION_PATCHLEVEL 2 30 #define MPFR_VERSION_STRING "3.1.2 "30 #define MPFR_VERSION_STRING "3.1.2-p1" 31 31 32 32 /* Macros dealing with MPFR VERSION */ 33 33 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -
src/version.c
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
old new 25 25 const char * 26 26 mpfr_get_version (void) 27 27 { 28 return "3.1.2 ";28 return "3.1.2-p1"; 29 29 } -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
old new 1 fits-smallneg -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
old new 1 3.1.2-p 11 3.1.2-p2 -
src/fits_u.h
diff -Naurd mpfr-3.1.2-a/src/fits_u.h mpfr-3.1.2-b/src/fits_u.h
old new 32 32 int res; 33 33 34 34 if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (f))) 35 /* Zero always fit */ 36 return MPFR_IS_ZERO (f) ? 1 : 0; 37 else if (MPFR_IS_NEG (f)) 38 /* Negative numbers don't fit */ 39 return 0; 40 /* now it fits if 41 (a) f <= MAXIMUM 42 (b) round(f, prec(slong), rnd) <= MAXIMUM */ 35 return MPFR_IS_ZERO (f) ? 1 : 0; /* Zero always fits */ 43 36 44 37 e = MPFR_GET_EXP (f); 45 38 39 if (MPFR_IS_NEG (f)) 40 return e >= 1 ? 0 /* f <= -1 does not fit */ 41 : rnd != MPFR_RNDN ? MPFR_IS_LIKE_RNDU (rnd, -1) /* directed mode */ 42 : e < 0 ? 1 /* f > -1/2 fits in MPFR_RNDN */ 43 : mpfr_powerof2_raw(f); /* -1/2 fits, -1 < f < -1/2 don't */ 44 45 /* Now it fits if 46 (a) f <= MAXIMUM 47 (b) round(f, prec(slong), rnd) <= MAXIMUM */ 48 46 49 /* first compute prec(MAXIMUM); fits in an int */ 47 50 for (s = MAXIMUM, prec = 0; s != 0; s /= 2, prec ++); 48 51 -
src/fits_uintmax.c
diff -Naurd mpfr-3.1.2-a/src/fits_uintmax.c mpfr-3.1.2-b/src/fits_uintmax.c
old new 27 27 #include "mpfr-intmax.h" 28 28 #include "mpfr-impl.h" 29 29 30 #ifdef _MPFR_H_HAVE_INTMAX_T 31 32 /* We can't use fits_u.h <= mpfr_cmp_ui */ 33 int 34 mpfr_fits_uintmax_p (mpfr_srcptr f, mpfr_rnd_t rnd) 35 { 36 mpfr_exp_t e; 37 int prec; 38 uintmax_t s; 39 mpfr_t x; 40 int res; 41 42 if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (f))) 43 /* Zero always fit */ 44 return MPFR_IS_ZERO (f) ? 1 : 0; 45 else if (MPFR_IS_NEG (f)) 46 /* Negative numbers don't fit */ 47 return 0; 48 /* now it fits if 49 (a) f <= MAXIMUM 50 (b) round(f, prec(slong), rnd) <= MAXIMUM */ 51 52 e = MPFR_GET_EXP (f); 53 54 /* first compute prec(MAXIMUM); fits in an int */ 55 for (s = MPFR_UINTMAX_MAX, prec = 0; s != 0; s /= 2, prec ++); 56 57 /* MAXIMUM needs prec bits, i.e. MAXIMUM = 2^prec - 1 */ 58 59 /* if e <= prec - 1, then f < 2^(prec-1) < MAXIMUM */ 60 if (e <= prec - 1) 61 return 1; 30 /* Note: though mpfr-impl.h is included in fits_u.h, we also include it 31 above so that it gets included even when _MPFR_H_HAVE_INTMAX_T is not 32 defined; this is necessary to avoid an empty translation unit, which 33 is forbidden by ISO C. Without this, a failing test can be reproduced 34 by creating an invalid stdint.h somewhere in the default include path 35 and by compiling MPFR with "gcc -ansi -pedantic-errors". */ 62 36 63 /* if e >= prec + 1, then f >= 2^prec > MAXIMUM */ 64 if (e >= prec + 1) 65 return 0; 37 #ifdef _MPFR_H_HAVE_INTMAX_T 66 38 67 MPFR_ASSERTD (e == prec); 39 #define FUNCTION mpfr_fits_uintmax_p 40 #define MAXIMUM MPFR_UINTMAX_MAX 41 #define TYPE uintmax_t 68 42 69 /* hard case: first round to prec bits, then check */ 70 mpfr_init2 (x, prec); 71 mpfr_set (x, f, rnd); 72 res = MPFR_GET_EXP (x) == e; 73 mpfr_clear (x); 74 return res; 75 } 43 #include "fits_u.h" 76 44 77 45 #endif -
src/mpfr.h
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
old new 27 27 #define MPFR_VERSION_MAJOR 3 28 28 #define MPFR_VERSION_MINOR 1 29 29 #define MPFR_VERSION_PATCHLEVEL 2 30 #define MPFR_VERSION_STRING "3.1.2-p 1"30 #define MPFR_VERSION_STRING "3.1.2-p2" 31 31 32 32 /* Macros dealing with MPFR VERSION */ 33 33 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -
src/version.c
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
old new 25 25 const char * 26 26 mpfr_get_version (void) 27 27 { 28 return "3.1.2-p 1";28 return "3.1.2-p2"; 29 29 } -
tests/tfits.c
diff -Naurd mpfr-3.1.2-a/tests/tfits.c mpfr-3.1.2-b/tests/tfits.c
old new 33 33 #include "mpfr-intmax.h" 34 34 #include "mpfr-test.h" 35 35 36 #define ERROR1 { printf("Initial error for x="); mpfr_dump(x); exit(1); } 37 #define ERROR2 { printf("Error for x="); mpfr_dump(x); exit(1); } 36 #define ERROR1(N) \ 37 do \ 38 { \ 39 printf("Error %d for rnd = %s and x = ", N, \ 40 mpfr_print_rnd_mode ((mpfr_rnd_t) r)); \ 41 mpfr_dump(x); \ 42 exit(1); \ 43 } \ 44 while (0) 38 45 39 46 static void check_intmax (void); 40 47 41 48 int 42 49 main (void) 43 50 { 44 mpfr_t x; 51 mpfr_t x, y; 52 int i, r; 45 53 46 54 tests_start_mpfr (); 47 55 48 56 mpfr_init2 (x, 256); 57 mpfr_init2 (y, 8); 49 58 50 /* Check NAN */ 51 mpfr_set_nan (x); 52 if (mpfr_fits_ulong_p (x, MPFR_RNDN)) 53 ERROR1; 54 if (mpfr_fits_slong_p (x, MPFR_RNDN)) 55 ERROR1; 56 if (mpfr_fits_uint_p (x, MPFR_RNDN)) 57 ERROR1; 58 if (mpfr_fits_sint_p (x, MPFR_RNDN)) 59 ERROR1; 60 if (mpfr_fits_ushort_p (x, MPFR_RNDN)) 61 ERROR1; 62 if (mpfr_fits_sshort_p (x, MPFR_RNDN)) 63 ERROR1; 59 RND_LOOP (r) 60 { 64 61 65 /* Check INF*/66 mpfr_set_inf (x, 1);67 if (mpfr_fits_ulong_p (x, MPFR_RNDN))68 ERROR1;69 if (mpfr_fits_slong_p (x, MPFR_RNDN))70 ERROR1;71 if (mpfr_fits_uint_p (x, MPFR_RNDN))72 ERROR1;73 if (mpfr_fits_sint_p (x, MPFR_RNDN))74 ERROR1;75 if (mpfr_fits_ushort_p (x, MPFR_RNDN))76 ERROR1;77 if (mpfr_fits_sshort_p (x, MPFR_RNDN))78 ERROR1;62 /* Check NAN */ 63 mpfr_set_nan (x); 64 if (mpfr_fits_ulong_p (x, (mpfr_rnd_t) r)) 65 ERROR1 (1); 66 if (mpfr_fits_slong_p (x, (mpfr_rnd_t) r)) 67 ERROR1 (2); 68 if (mpfr_fits_uint_p (x, (mpfr_rnd_t) r)) 69 ERROR1 (3); 70 if (mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 71 ERROR1 (4); 72 if (mpfr_fits_ushort_p (x, (mpfr_rnd_t) r)) 73 ERROR1 (5); 74 if (mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 75 ERROR1 (6); 79 76 80 /* Check Zero*/81 MPFR_SET_ZERO (x);82 if (!mpfr_fits_ulong_p (x, MPFR_RNDN))83 ERROR2;84 if (!mpfr_fits_slong_p (x, MPFR_RNDN))85 ERROR2;86 if (!mpfr_fits_uint_p (x, MPFR_RNDN))87 ERROR2;88 if (!mpfr_fits_sint_p (x, MPFR_RNDN))89 ERROR2;90 if (!mpfr_fits_ushort_p (x, MPFR_RNDN))91 ERROR2;92 if (!mpfr_fits_sshort_p (x, MPFR_RNDN))93 ERROR2;77 /* Check INF */ 78 mpfr_set_inf (x, 1); 79 if (mpfr_fits_ulong_p (x, (mpfr_rnd_t) r)) 80 ERROR1 (7); 81 if (mpfr_fits_slong_p (x, (mpfr_rnd_t) r)) 82 ERROR1 (8); 83 if (mpfr_fits_uint_p (x, (mpfr_rnd_t) r)) 84 ERROR1 (9); 85 if (mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 86 ERROR1 (10); 87 if (mpfr_fits_ushort_p (x, (mpfr_rnd_t) r)) 88 ERROR1 (11); 89 if (mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 90 ERROR1 (12); 94 91 95 /* Check small op*/96 mpfr_set_str1 (x, "1@-1");97 if (!mpfr_fits_ulong_p (x, MPFR_RNDN))98 ERROR2;99 if (!mpfr_fits_slong_p (x, MPFR_RNDN))100 ERROR2;101 if (!mpfr_fits_uint_p (x, MPFR_RNDN))102 ERROR2;103 if (!mpfr_fits_sint_p (x, MPFR_RNDN))104 ERROR2;105 if (!mpfr_fits_ushort_p (x, MPFR_RNDN))106 ERROR2;107 if (!mpfr_fits_sshort_p (x, MPFR_RNDN))108 ERROR2;92 /* Check Zero */ 93 MPFR_SET_ZERO (x); 94 if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r)) 95 ERROR1 (13); 96 if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r)) 97 ERROR1 (14); 98 if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r)) 99 ERROR1 (15); 100 if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 101 ERROR1 (16); 102 if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r)) 103 ERROR1 (17); 104 if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 105 ERROR1 (18); 109 106 110 /* Check 17*/111 mpfr_set_ui (x, 17, MPFR_RNDN);112 if (!mpfr_fits_ulong_p (x, MPFR_RNDN))113 ERROR2;114 if (!mpfr_fits_slong_p (x, MPFR_RNDN))115 ERROR2;116 if (!mpfr_fits_uint_p (x, MPFR_RNDN))117 ERROR2;118 if (!mpfr_fits_sint_p (x, MPFR_RNDN))119 ERROR2;120 if (!mpfr_fits_ushort_p (x, MPFR_RNDN))121 ERROR2;122 if (!mpfr_fits_sshort_p (x, MPFR_RNDN))123 ERROR2;107 /* Check small positive op */ 108 mpfr_set_str1 (x, "1@-1"); 109 if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r)) 110 ERROR1 (19); 111 if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r)) 112 ERROR1 (20); 113 if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r)) 114 ERROR1 (21); 115 if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 116 ERROR1 (22); 117 if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r)) 118 ERROR1 (23); 119 if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 120 ERROR1 (24); 124 121 125 /* Check all other values */ 126 mpfr_set_ui (x, ULONG_MAX, MPFR_RNDN); 127 mpfr_mul_2exp (x, x, 1, MPFR_RNDN); 128 if (mpfr_fits_ulong_p (x, MPFR_RNDN)) 129 ERROR1; 130 if (mpfr_fits_slong_p (x, MPFR_RNDN)) 131 ERROR1; 132 mpfr_mul_2exp (x, x, 40, MPFR_RNDN); 133 if (mpfr_fits_ulong_p (x, MPFR_RNDN)) 134 ERROR1; 135 if (mpfr_fits_uint_p (x, MPFR_RNDN)) 136 ERROR1; 137 if (mpfr_fits_sint_p (x, MPFR_RNDN)) 138 ERROR1; 139 if (mpfr_fits_ushort_p (x, MPFR_RNDN)) 140 ERROR1; 141 if (mpfr_fits_sshort_p (x, MPFR_RNDN)) 142 ERROR1; 122 /* Check 17 */ 123 mpfr_set_ui (x, 17, MPFR_RNDN); 124 if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r)) 125 ERROR1 (25); 126 if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r)) 127 ERROR1 (26); 128 if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r)) 129 ERROR1 (27); 130 if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 131 ERROR1 (28); 132 if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r)) 133 ERROR1 (29); 134 if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 135 ERROR1 (30); 143 136 144 mpfr_set_ui (x, ULONG_MAX, MPFR_RNDN);145 if (!mpfr_fits_ulong_p (x, MPFR_RNDN))146 ERROR2;147 mpfr_set_ui (x, LONG_MAX, MPFR_RNDN);148 if (!mpfr_fits_slong_p (x, MPFR_RNDN))149 ERROR2;150 mpfr_set_ui (x, UINT_MAX, MPFR_RNDN);151 if (!mpfr_fits_uint_p (x, MPFR_RNDN))152 ERROR2;153 mpfr_set_ui (x, INT_MAX, MPFR_RNDN);154 if (!mpfr_fits_sint_p (x, MPFR_RNDN))155 ERROR2;156 mpfr_set_ui (x, USHRT_MAX, MPFR_RNDN);157 if (!mpfr_fits_ushort_p (x, MPFR_RNDN))158 ERROR2;159 mpfr_set_ui (x, SHRT_MAX, MPFR_RNDN);160 if (!mpfr_fits_sshort_p (x, MPFR_RNDN))161 ERROR2;137 /* Check all other values */ 138 mpfr_set_ui (x, ULONG_MAX, MPFR_RNDN); 139 mpfr_mul_2exp (x, x, 1, MPFR_RNDN); 140 if (mpfr_fits_ulong_p (x, (mpfr_rnd_t) r)) 141 ERROR1 (31); 142 if (mpfr_fits_slong_p (x, (mpfr_rnd_t) r)) 143 ERROR1 (32); 144 mpfr_mul_2exp (x, x, 40, MPFR_RNDN); 145 if (mpfr_fits_ulong_p (x, (mpfr_rnd_t) r)) 146 ERROR1 (33); 147 if (mpfr_fits_uint_p (x, (mpfr_rnd_t) r)) 148 ERROR1 (34); 149 if (mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 150 ERROR1 (35); 151 if (mpfr_fits_ushort_p (x, (mpfr_rnd_t) r)) 152 ERROR1 (36); 153 if (mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 154 ERROR1 (37); 162 155 163 mpfr_set_si (x, 1, MPFR_RNDN); 164 if (!mpfr_fits_sint_p (x, MPFR_RNDN)) 165 ERROR2; 166 if (!mpfr_fits_sshort_p (x, MPFR_RNDN)) 167 ERROR2; 156 mpfr_set_ui (x, ULONG_MAX, MPFR_RNDN); 157 if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r)) 158 ERROR1 (38); 159 mpfr_set_ui (x, LONG_MAX, MPFR_RNDN); 160 if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r)) 161 ERROR1 (39); 162 mpfr_set_ui (x, UINT_MAX, MPFR_RNDN); 163 if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r)) 164 ERROR1 (40); 165 mpfr_set_ui (x, INT_MAX, MPFR_RNDN); 166 if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 167 ERROR1 (41); 168 mpfr_set_ui (x, USHRT_MAX, MPFR_RNDN); 169 if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r)) 170 ERROR1 (42); 171 mpfr_set_ui (x, SHRT_MAX, MPFR_RNDN); 172 if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 173 ERROR1 (43); 168 174 169 /* Check negative value */ 170 mpfr_set_si (x, -1, MPFR_RNDN); 171 if (!mpfr_fits_sint_p (x, MPFR_RNDN)) 172 ERROR2; 173 if (!mpfr_fits_sshort_p (x, MPFR_RNDN)) 174 ERROR2; 175 if (!mpfr_fits_slong_p (x, MPFR_RNDN)) 176 ERROR2; 177 if (mpfr_fits_uint_p (x, MPFR_RNDN)) 178 ERROR1; 179 if (mpfr_fits_ushort_p (x, MPFR_RNDN)) 180 ERROR1; 181 if (mpfr_fits_ulong_p (x, MPFR_RNDN)) 182 ERROR1; 175 mpfr_set_si (x, 1, MPFR_RNDN); 176 if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 177 ERROR1 (44); 178 if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 179 ERROR1 (45); 180 181 /* Check negative op */ 182 for (i = 1; i <= 4; i++) 183 { 184 int inv; 185 186 mpfr_set_si_2exp (x, -i, -2, MPFR_RNDN); 187 mpfr_rint (y, x, (mpfr_rnd_t) r); 188 inv = MPFR_NOTZERO (y); 189 if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r) ^ inv) 190 ERROR1 (46); 191 if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r)) 192 ERROR1 (47); 193 if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r) ^ inv) 194 ERROR1 (48); 195 if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r)) 196 ERROR1 (49); 197 if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r) ^ inv) 198 ERROR1 (50); 199 if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r)) 200 ERROR1 (51); 201 } 202 } 183 203 184 204 mpfr_clear (x); 205 mpfr_clear (y); 185 206 186 207 check_intmax (); 187 208 … … 189 210 return 0; 190 211 } 191 212 192 static void check_intmax (void) 213 static void 214 check_intmax (void) 193 215 { 194 216 #ifdef _MPFR_H_HAVE_INTMAX_T 195 mpfr_t x; 217 mpfr_t x, y; 218 int i, r; 196 219 197 mpfr_init2 (x, sizeof (uintmax_t)*CHAR_BIT); 220 mpfr_init2 (x, sizeof (uintmax_t) * CHAR_BIT); 221 mpfr_init2 (y, 8); 198 222 199 /* Check NAN */ 200 mpfr_set_nan (x); 201 if (mpfr_fits_uintmax_p (x, MPFR_RNDN)) 202 ERROR1; 203 if (mpfr_fits_intmax_p (x, MPFR_RNDN)) 204 ERROR1; 223 RND_LOOP (r) 224 { 225 /* Check NAN */ 226 mpfr_set_nan (x); 227 if (mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r)) 228 ERROR1 (52); 229 if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 230 ERROR1 (53); 205 231 206 /* Check INF */207 mpfr_set_inf (x, 1);208 if (mpfr_fits_uintmax_p (x, MPFR_RNDN))209 ERROR1;210 if (mpfr_fits_intmax_p (x, MPFR_RNDN))211 ERROR1;232 /* Check INF */ 233 mpfr_set_inf (x, 1); 234 if (mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r)) 235 ERROR1 (54); 236 if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 237 ERROR1 (55); 212 238 213 /* Check Zero */214 MPFR_SET_ZERO (x);215 if (!mpfr_fits_uintmax_p (x, MPFR_RNDN))216 ERROR2;217 if (!mpfr_fits_intmax_p (x, MPFR_RNDN))218 ERROR2;239 /* Check Zero */ 240 MPFR_SET_ZERO (x); 241 if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r)) 242 ERROR1 (56); 243 if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 244 ERROR1 (57); 219 245 220 /* Checksmall op */221 mpfr_set_str1 (x, "1@-1");222 if (!mpfr_fits_uintmax_p (x, MPFR_RNDN))223 ERROR2;224 if (!mpfr_fits_intmax_p (x, MPFR_RNDN))225 ERROR2;246 /* Check positive small op */ 247 mpfr_set_str1 (x, "1@-1"); 248 if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r)) 249 ERROR1 (58); 250 if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 251 ERROR1 (59); 226 252 227 /* Check 17 */228 mpfr_set_ui (x, 17, MPFR_RNDN);229 if (!mpfr_fits_uintmax_p (x, MPFR_RNDN))230 ERROR2;231 if (!mpfr_fits_intmax_p (x, MPFR_RNDN))232 ERROR2;253 /* Check 17 */ 254 mpfr_set_ui (x, 17, MPFR_RNDN); 255 if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r)) 256 ERROR1 (60); 257 if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 258 ERROR1 (61); 233 259 234 /* Check hugest */235 mpfr_set_ui_2exp (x, 42, sizeof (uintmax_t) * 32, MPFR_RNDN);236 if (mpfr_fits_uintmax_p (x, MPFR_RNDN))237 ERROR1;238 if (mpfr_fits_intmax_p (x, MPFR_RNDN))239 ERROR1;260 /* Check hugest */ 261 mpfr_set_ui_2exp (x, 42, sizeof (uintmax_t) * 32, MPFR_RNDN); 262 if (mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r)) 263 ERROR1 (62); 264 if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 265 ERROR1 (63); 240 266 241 /* Check all other values */242 mpfr_set_uj (x, MPFR_UINTMAX_MAX, MPFR_RNDN);243 mpfr_add_ui (x, x, 1, MPFR_RNDN);244 if (mpfr_fits_uintmax_p (x, MPFR_RNDN))245 ERROR1;246 mpfr_set_uj (x, MPFR_UINTMAX_MAX, MPFR_RNDN);247 if (!mpfr_fits_uintmax_p (x, MPFR_RNDN))248 ERROR2;249 mpfr_set_sj (x, MPFR_INTMAX_MAX, MPFR_RNDN);250 mpfr_add_ui (x, x, 1, MPFR_RNDN);251 if (mpfr_fits_intmax_p (x, MPFR_RNDN))252 ERROR1;253 mpfr_set_sj (x, MPFR_INTMAX_MAX, MPFR_RNDN);254 if (!mpfr_fits_intmax_p (x, MPFR_RNDN))255 ERROR2;256 mpfr_set_sj (x, MPFR_INTMAX_MIN, MPFR_RNDN);257 if (!mpfr_fits_intmax_p (x, MPFR_RNDN))258 ERROR2;259 mpfr_sub_ui (x, x, 1, MPFR_RNDN);260 if (mpfr_fits_intmax_p (x, MPFR_RNDN))261 ERROR1;267 /* Check all other values */ 268 mpfr_set_uj (x, MPFR_UINTMAX_MAX, MPFR_RNDN); 269 mpfr_add_ui (x, x, 1, MPFR_RNDN); 270 if (mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r)) 271 ERROR1 (64); 272 mpfr_set_uj (x, MPFR_UINTMAX_MAX, MPFR_RNDN); 273 if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r)) 274 ERROR1 (65); 275 mpfr_set_sj (x, MPFR_INTMAX_MAX, MPFR_RNDN); 276 mpfr_add_ui (x, x, 1, MPFR_RNDN); 277 if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 278 ERROR1 (66); 279 mpfr_set_sj (x, MPFR_INTMAX_MAX, MPFR_RNDN); 280 if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 281 ERROR1 (67); 282 mpfr_set_sj (x, MPFR_INTMAX_MIN, MPFR_RNDN); 283 if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 284 ERROR1 (68); 285 mpfr_sub_ui (x, x, 1, MPFR_RNDN); 286 if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 287 ERROR1 (69); 262 288 263 /* Check negative value */ 264 mpfr_set_si (x, -1, MPFR_RNDN); 265 if (!mpfr_fits_intmax_p (x, MPFR_RNDN)) 266 ERROR2; 267 if (mpfr_fits_uintmax_p (x, MPFR_RNDN)) 268 ERROR1; 289 /* Check negative op */ 290 for (i = 1; i <= 4; i++) 291 { 292 int inv; 293 294 mpfr_set_si_2exp (x, -i, -2, MPFR_RNDN); 295 mpfr_rint (y, x, (mpfr_rnd_t) r); 296 inv = MPFR_NOTZERO (y); 297 if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r) ^ inv) 298 ERROR1 (70); 299 if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r)) 300 ERROR1 (71); 301 } 302 } 269 303 270 304 mpfr_clear (x); 305 mpfr_clear (y); 271 306 #endif 272 307 } 273 -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
old new 1 clang-divby0 -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
old new 1 3.1.2-p 21 3.1.2-p3 -
src/mpfr-impl.h
diff -Naurd mpfr-3.1.2-a/src/mpfr-impl.h mpfr-3.1.2-b/src/mpfr-impl.h
old new 468 468 #define MPFR_LIMBS_PER_FLT ((IEEE_FLT_MANT_DIG-1)/GMP_NUMB_BITS+1) 469 469 470 470 /* Visual C++ doesn't support +1.0/0.0, -1.0/0.0 and 0.0/0.0 471 at compile time. */ 472 #if defined(_MSC_VER) && defined(_WIN32) && (_MSC_VER >= 1200) 471 at compile time. 472 Clang with -fsanitize=undefined is a bit similar due to a bug: 473 http://llvm.org/bugs/show_bug.cgi?id=17381 474 but even without its sanitizer, it may be better to use the 475 double_zero version until IEEE 754 division by zero is properly 476 supported: 477 http://llvm.org/bugs/show_bug.cgi?id=17000 478 */ 479 #if (defined(_MSC_VER) && defined(_WIN32) && (_MSC_VER >= 1200)) || \ 480 defined(__clang__) 473 481 static double double_zero = 0.0; 474 482 # define DBL_NAN (double_zero/double_zero) 475 483 # define DBL_POS_INF ((double) 1.0/double_zero) … … 501 509 (with Xcode 2.4.1, i.e. the latest one). */ 502 510 #define LVALUE(x) (&(x) == &(x) || &(x) != &(x)) 503 511 #define DOUBLE_ISINF(x) (LVALUE(x) && ((x) > DBL_MAX || (x) < -DBL_MAX)) 512 /* The DOUBLE_ISNAN(x) macro is also valid on long double x 513 (assuming that the compiler isn't too broken). */ 504 514 #ifdef MPFR_NANISNAN 505 515 /* Avoid MIPSpro / IRIX64 / gcc -ffast-math (incorrect) optimizations. 506 516 The + must not be replaced by a ||. With gcc -ffast-math, NaN is -
src/mpfr.h
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
old new 27 27 #define MPFR_VERSION_MAJOR 3 28 28 #define MPFR_VERSION_MINOR 1 29 29 #define MPFR_VERSION_PATCHLEVEL 2 30 #define MPFR_VERSION_STRING "3.1.2-p 2"30 #define MPFR_VERSION_STRING "3.1.2-p3" 31 31 32 32 /* Macros dealing with MPFR VERSION */ 33 33 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -
src/version.c
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
old new 25 25 const char * 26 26 mpfr_get_version (void) 27 27 { 28 return "3.1.2-p 2";28 return "3.1.2-p3"; 29 29 } -
tests/tget_flt.c
diff -Naurd mpfr-3.1.2-a/tests/tget_flt.c mpfr-3.1.2-b/tests/tget_flt.c
old new 28 28 main (void) 29 29 { 30 30 mpfr_t x, y; 31 float f, g , infp;31 float f, g; 32 32 int i; 33 #if !defined(MPFR_ERRDIVZERO) 34 float infp; 35 #endif 36 37 tests_start_mpfr (); 33 38 39 #if !defined(MPFR_ERRDIVZERO) 40 /* The definition of DBL_POS_INF involves a division by 0. This makes 41 "clang -O2 -fsanitize=undefined -fno-sanitize-recover" fail. */ 34 42 infp = (float) DBL_POS_INF; 35 43 if (infp * 0.5 != infp) 36 44 { … … 38 46 fprintf (stderr, "(this is probably a compiler bug, please report)\n"); 39 47 exit (1); 40 48 } 41 42 tests_start_mpfr (); 49 #endif 43 50 44 51 mpfr_init2 (x, 24); 45 52 mpfr_init2 (y, 24); … … 353 360 printf ("expected %.8e, got %.8e\n", g, f); 354 361 exit (1); 355 362 } 363 #if !defined(MPFR_ERRDIVZERO) 356 364 f = mpfr_get_flt (x, MPFR_RNDN); /* first round to 2^128 (even rule), 357 365 thus we should get +Inf */ 358 366 g = infp; … … 376 384 printf ("expected %.8e, got %.8e\n", g, f); 377 385 exit (1); 378 386 } 387 #endif 379 388 380 389 mpfr_clear (x); 381 390 mpfr_clear (y); -
tests/tset_ld.c
diff -Naurd mpfr-3.1.2-a/tests/tset_ld.c mpfr-3.1.2-b/tests/tset_ld.c
old new 47 47 static int 48 48 Isnan_ld (long double d) 49 49 { 50 double e = (double) d; 51 if (DOUBLE_ISNAN (e)) 50 /* Do not convert d to double as this can give an overflow, which 51 may confuse compilers without IEEE 754 support (such as clang 52 -fsanitize=undefined), or trigger a trap if enabled. 53 The DOUBLE_ISNAN macro should work fine on long double. */ 54 if (DOUBLE_ISNAN (d)) 52 55 return 1; 53 56 LONGDOUBLE_NAN_ACTION (d, goto yes); 54 57 return 0; -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
old new 1 printf-alt0 -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
old new 1 3.1.2-p 31 3.1.2-p4 -
src/mpfr.h
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
old new 27 27 #define MPFR_VERSION_MAJOR 3 28 28 #define MPFR_VERSION_MINOR 1 29 29 #define MPFR_VERSION_PATCHLEVEL 2 30 #define MPFR_VERSION_STRING "3.1.2-p 3"30 #define MPFR_VERSION_STRING "3.1.2-p4" 31 31 32 32 /* Macros dealing with MPFR VERSION */ 33 33 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -
src/vasprintf.c
diff -Naurd mpfr-3.1.2-a/src/vasprintf.c mpfr-3.1.2-b/src/vasprintf.c
old new 1040 1040 } 1041 1041 1042 1042 /* Determine the different parts of the string representation of the regular 1043 number P when SPEC.SPECis 'e', 'E', 'g', or 'G'.1043 number P when spec.spec is 'e', 'E', 'g', or 'G'. 1044 1044 DEC_INFO contains the previously computed exponent and string or is NULL. 1045 1045 1046 1046 return -1 if some field > INT_MAX */ … … 1167 1167 } 1168 1168 1169 1169 /* Determine the different parts of the string representation of the regular 1170 number P when SPEC.SPECis 'f', 'F', 'g', or 'G'.1170 number P when spec.spec is 'f', 'F', 'g', or 'G'. 1171 1171 DEC_INFO contains the previously computed exponent and string or is NULL. 1172 1172 1173 1173 return -1 if some field of number_parts is greater than INT_MAX */ … … 1559 1559 /* fractional part */ 1560 1560 { 1561 1561 np->point = MPFR_DECIMAL_POINT; 1562 np->fp_trailing_zeros = (spec.spec == 'g' &&spec.spec == 'G') ?1562 np->fp_trailing_zeros = (spec.spec == 'g' || spec.spec == 'G') ? 1563 1563 spec.prec - 1 : spec.prec; 1564 1564 } 1565 1565 else if (spec.alt) -
src/version.c
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
old new 25 25 const char * 26 26 mpfr_get_version (void) 27 27 { 28 return "3.1.2-p 3";28 return "3.1.2-p4"; 29 29 } -
tests/tsprintf.c
diff -Naurd mpfr-3.1.2-a/tests/tsprintf.c mpfr-3.1.2-b/tests/tsprintf.c
old new 456 456 check_sprintf ("1.999900 ", "%-#10.7RG", x); 457 457 check_sprintf ("1.9999 ", "%-10.7RG", x); 458 458 mpfr_set_ui (x, 1, MPFR_RNDN); 459 check_sprintf ("1.", "%#.1Rg", x); 460 check_sprintf ("1. ", "%-#5.1Rg", x); 461 check_sprintf (" 1.0", "%#5.2Rg", x); 459 462 check_sprintf ("1.00000000000000000000000000000", "%#.30Rg", x); 460 463 check_sprintf ("1", "%.30Rg", x); 461 464 mpfr_set_ui (x, 0, MPFR_RNDN); 462 check_sprintf ("0.000000000000000000000000000000", "%#.30Rg", x); 465 check_sprintf ("0.", "%#.1Rg", x); 466 check_sprintf ("0. ", "%-#5.1Rg", x); 467 check_sprintf (" 0.0", "%#5.2Rg", x); 468 check_sprintf ("0.00000000000000000000000000000", "%#.30Rg", x); 463 469 check_sprintf ("0", "%.30Rg", x); 464 470 465 471 /* following tests with precision 53 bits */ -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
old new 1 custom_init_set -
mpfr-3.1.
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
old new 1 3.1.2-p 41 3.1.2-p5 -
src/mpfr.h
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
old new 27 27 #define MPFR_VERSION_MAJOR 3 28 28 #define MPFR_VERSION_MINOR 1 29 29 #define MPFR_VERSION_PATCHLEVEL 2 30 #define MPFR_VERSION_STRING "3.1.2-p 4"30 #define MPFR_VERSION_STRING "3.1.2-p5" 31 31 32 32 /* Macros dealing with MPFR VERSION */ 33 33 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) … … 861 861 _t = (mpfr_kind_t) _k; \ 862 862 _s = 1; \ 863 863 } else { \ 864 _t = (mpfr_kind_t) - k;\864 _t = (mpfr_kind_t) - _k; \ 865 865 _s = -1; \ 866 866 } \ 867 867 _e = _t == MPFR_REGULAR_KIND ? (e) : \ -
src/version.c
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
old new 25 25 const char * 26 26 mpfr_get_version (void) 27 27 { 28 return "3.1.2-p 4";28 return "3.1.2-p5"; 29 29 }
Note:
See TracBrowser
for help on using the repository browser.