wok-6.x diff mpfr/stuff/mpfr-3.1.0.patch @ rev 13784
Add llvm (thanks ernia)
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Fri Jan 04 18:16:39 2013 +0100 (2013-01-04) |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/mpfr/stuff/mpfr-3.1.0.patch Fri Jan 04 18:16:39 2013 +0100 1.3 @@ -0,0 +1,473 @@ 1.4 +Submitted By: Matt Burgess <matthew_at_linuxfromscratch_dot_org> 1.5 +Date: 2011-12-22 1.6 +Initial Package Version: 3.1.0 1.7 +Upstream Status: Already in upstream patch repo 1.8 +Origin: Upstream 1.9 +Description: This patch contains patches for several bugs in MPFR, 1.10 + the main one being a rounding related error with the 1.11 + mpfr_*printf functions. 1.12 + 1.13 +diff -Naur mpfr-3.1.0.orig/PATCHES mpfr-3.1.0/PATCHES 1.14 +--- mpfr-3.1.0.orig/PATCHES 2011-10-03 08:17:15.000000000 +0000 1.15 ++++ mpfr-3.1.0/PATCHES 2011-12-22 11:08:42.188819413 +0000 1.16 +@@ -0,0 +1,4 @@ 1.17 ++gmp41compat 1.18 ++vasprintf 1.19 ++lib-search-path 1.20 ++mpfr_unlikely 1.21 +diff -Naur mpfr-3.1.0.orig/VERSION mpfr-3.1.0/VERSION 1.22 +--- mpfr-3.1.0.orig/VERSION 2011-10-03 08:17:15.000000000 +0000 1.23 ++++ mpfr-3.1.0/VERSION 2011-11-28 12:22:52.000000000 +0000 1.24 +@@ -1 +1 @@ 1.25 +-3.1.0 1.26 ++3.1.0-p4 1.27 +diff -Naur mpfr-3.1.0.orig/doc/mpfr.info mpfr-3.1.0/doc/mpfr.info 1.28 +--- mpfr-3.1.0.orig/doc/mpfr.info 2011-10-03 09:43:04.000000000 +0000 1.29 ++++ mpfr-3.1.0/doc/mpfr.info 2011-11-28 12:22:52.000000000 +0000 1.30 +@@ -2994,11 +2994,12 @@ 1.31 + 1.32 + * `mpfr_urandom' and `mpfr_urandomb' changed in MPFR 3.1. Their 1.33 + behavior no longer depends on the platform (assuming this is also 1.34 +- true for GMP's random generator). As a consequence, the returned 1.35 +- values can be different between MPFR 3.1 and previous MPFR 1.36 +- versions. Note: as the reproducibility of these functions was not 1.37 +- specified before MPFR 3.1, the MPFR 3.1 behavior is _not_ regarded 1.38 +- as backward incompatible with previous versions. 1.39 ++ true for GMP's random generator, which is not the case between GMP 1.40 ++ 4.1 and 4.2 if `gmp_randinit_default' is used). As a consequence, 1.41 ++ the returned values can be different between MPFR 3.1 and previous 1.42 ++ MPFR versions. Note: as the reproducibility of these functions 1.43 ++ was not specified before MPFR 3.1, the MPFR 3.1 behavior is _not_ 1.44 ++ regarded as backward incompatible with previous versions. 1.45 + 1.46 + 1.47 + 1.48 +@@ -4239,13 +4240,13 @@ 1.49 + Node: Type and Macro Changes129308 1.50 + Node: Added Functions132029 1.51 + Node: Changed Functions134972 1.52 +-Node: Removed Functions139167 1.53 +-Node: Other Changes139579 1.54 +-Node: Contributors141108 1.55 +-Node: References143574 1.56 +-Node: GNU Free Documentation License145315 1.57 +-Node: Concept Index167758 1.58 +-Node: Function and Type Index173677 1.59 ++Node: Removed Functions139253 1.60 ++Node: Other Changes139665 1.61 ++Node: Contributors141194 1.62 ++Node: References143660 1.63 ++Node: GNU Free Documentation License145401 1.64 ++Node: Concept Index167844 1.65 ++Node: Function and Type Index173763 1.66 + 1.67 + End Tag Table 1.68 + 1.69 +diff -Naur mpfr-3.1.0.orig/doc/mpfr.texi mpfr-3.1.0/doc/mpfr.texi 1.70 +--- mpfr-3.1.0.orig/doc/mpfr.texi 2011-10-03 08:17:14.000000000 +0000 1.71 ++++ mpfr-3.1.0/doc/mpfr.texi 2011-11-28 12:22:52.000000000 +0000 1.72 +@@ -3466,8 +3466,9 @@ 1.73 + a lack of specification. 1.74 + 1.75 + @item @code{mpfr_urandom} and @code{mpfr_urandomb} changed in MPFR 3.1. 1.76 +-Their behavior no longer depends on the platform (assuming this is also 1.77 +-true for GMP's random generator). As a consequence, the returned values 1.78 ++Their behavior no longer depends on the platform (assuming this is also true 1.79 ++for GMP's random generator, which is not the case between GMP 4.1 and 4.2 if 1.80 ++@code{gmp_randinit_default} is used). As a consequence, the returned values 1.81 + can be different between MPFR 3.1 and previous MPFR versions. 1.82 + Note: as the reproducibility of these functions was not specified 1.83 + before MPFR 3.1, the MPFR 3.1 behavior is @emph{not} regarded as 1.84 +diff -Naur mpfr-3.1.0.orig/src/mpfr-impl.h mpfr-3.1.0/src/mpfr-impl.h 1.85 +--- mpfr-3.1.0.orig/src/mpfr-impl.h 2011-10-03 08:17:09.000000000 +0000 1.86 ++++ mpfr-3.1.0/src/mpfr-impl.h 2011-10-05 21:39:57.000000000 +0000 1.87 +@@ -988,10 +988,11 @@ 1.88 + ******************************************************/ 1.89 + 1.90 + /* Theses macros help the compiler to determine if a test is 1.91 +- * likely or unlikely. */ 1.92 ++ likely or unlikely. The !! is necessary in case x is larger 1.93 ++ than a long. */ 1.94 + #if __MPFR_GNUC(3,0) || __MPFR_ICC(8,1,0) 1.95 + # define MPFR_LIKELY(x) (__builtin_expect(!!(x),1)) 1.96 +-# define MPFR_UNLIKELY(x) (__builtin_expect((x),0)) 1.97 ++# define MPFR_UNLIKELY(x) (__builtin_expect(!!(x),0)) 1.98 + #else 1.99 + # define MPFR_LIKELY(x) (x) 1.100 + # define MPFR_UNLIKELY(x) (x) 1.101 +diff -Naur mpfr-3.1.0.orig/src/mpfr.h mpfr-3.1.0/src/mpfr.h 1.102 +--- mpfr-3.1.0.orig/src/mpfr.h 2011-10-03 08:17:09.000000000 +0000 1.103 ++++ mpfr-3.1.0/src/mpfr.h 2011-11-28 12:22:52.000000000 +0000 1.104 +@@ -27,7 +27,7 @@ 1.105 + #define MPFR_VERSION_MAJOR 3 1.106 + #define MPFR_VERSION_MINOR 1 1.107 + #define MPFR_VERSION_PATCHLEVEL 0 1.108 +-#define MPFR_VERSION_STRING "3.1.0" 1.109 ++#define MPFR_VERSION_STRING "3.1.0-p4" 1.110 + 1.111 + /* Macros dealing with MPFR VERSION */ 1.112 + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) 1.113 +diff -Naur mpfr-3.1.0.orig/src/vasprintf.c mpfr-3.1.0/src/vasprintf.c 1.114 +--- mpfr-3.1.0.orig/src/vasprintf.c 2011-10-03 08:17:09.000000000 +0000 1.115 ++++ mpfr-3.1.0/src/vasprintf.c 2011-11-03 15:15:11.000000000 +0000 1.116 +@@ -1178,7 +1178,7 @@ 1.117 + mpfr_exp_t exp; 1.118 + char * str; 1.119 + const int spec_g = (spec.spec == 'g' || spec.spec == 'G'); 1.120 +- const int keep_trailing_zeros = spec_g && spec.alt; 1.121 ++ const int keep_trailing_zeros = !spec_g || spec.alt; 1.122 + 1.123 + /* WARNING: an empty precision field is forbidden (it means precision = 6 1.124 + and it should have been changed to 6 before the function call) */ 1.125 +@@ -1356,7 +1356,7 @@ 1.126 + else 1.127 + /* 1 <= |p| */ 1.128 + { 1.129 +- size_t nsd; /* Number of significant digits */ 1.130 ++ size_t str_len; 1.131 + 1.132 + /* Determine the position of the most significant decimal digit. */ 1.133 + exp = floor_log10 (p); 1.134 +@@ -1365,12 +1365,10 @@ 1.135 + /* P is too large to print all its integral part digits */ 1.136 + return -1; 1.137 + 1.138 +- np->ip_size = exp + 1; 1.139 +- 1.140 +- nsd = spec.prec + np->ip_size; 1.141 + if (dec_info == NULL) 1.142 +- { 1.143 +- str = mpfr_get_str (NULL, &exp, 10, nsd, p, spec.rnd_mode); 1.144 ++ { /* this case occurs with mpfr_printf ("%.0RUf", x) with x=9.5 */ 1.145 ++ str = 1.146 ++ mpfr_get_str (NULL, &exp, 10, spec.prec+exp+1, p, spec.rnd_mode); 1.147 + register_string (np->sl, str); 1.148 + } 1.149 + else 1.150 +@@ -1379,81 +1377,60 @@ 1.151 + str = dec_info->str; 1.152 + } 1.153 + np->ip_ptr = MPFR_IS_NEG (p) ? ++str : str; /* skip sign */ 1.154 ++ str_len = strlen (str); 1.155 ++ 1.156 ++ /* integral part */ 1.157 ++ if (exp > str_len) 1.158 ++ /* mpfr_get_str gives no trailing zero when p is rounded up to the next 1.159 ++ power of 10 (p integer, so no fractional part) */ 1.160 ++ { 1.161 ++ np->ip_trailing_zeros = exp - str_len; 1.162 ++ np->ip_size = str_len; 1.163 ++ } 1.164 ++ else 1.165 ++ np->ip_size = exp; 1.166 + 1.167 + if (spec.group) 1.168 + /* thousands separator in integral part */ 1.169 + np->thousands_sep = MPFR_THOUSANDS_SEPARATOR; 1.170 + 1.171 +- if (nsd == 0 || (spec_g && !spec.alt)) 1.172 +- /* compute how much non-zero digits in integral and fractional 1.173 +- parts */ 1.174 ++ /* fractional part */ 1.175 ++ str += np->ip_size; 1.176 ++ str_len -= np->ip_size; 1.177 ++ if (!keep_trailing_zeros) 1.178 ++ /* remove trailing zeros, if any */ 1.179 + { 1.180 +- size_t str_len; 1.181 +- str_len = strlen (str); /* note: the sign has been skipped */ 1.182 +- 1.183 +- if (exp > str_len) 1.184 +- /* mpfr_get_str doesn't give the trailing zeros when p is a 1.185 +- multiple of 10 (p integer, so no fractional part) */ 1.186 ++ char *ptr = str + str_len - 1; /* pointer to the last digit of 1.187 ++ str */ 1.188 ++ while ((*ptr == '0') && (str_len != 0)) 1.189 + { 1.190 +- np->ip_trailing_zeros = exp - str_len; 1.191 +- np->ip_size = str_len; 1.192 +- if (spec.alt) 1.193 +- np->point = MPFR_DECIMAL_POINT; 1.194 +- } 1.195 +- else 1.196 +- /* str may contain some digits which are in fractional part */ 1.197 +- { 1.198 +- char *ptr; 1.199 +- 1.200 +- ptr = str + str_len - 1; /* points to the end of str */ 1.201 +- str_len -= np->ip_size; /* number of digits in fractional 1.202 +- part */ 1.203 +- 1.204 +- if (!keep_trailing_zeros) 1.205 +- /* remove trailing zeros, if any */ 1.206 +- { 1.207 +- while ((*ptr == '0') && (str_len != 0)) 1.208 +- { 1.209 +- --ptr; 1.210 +- --str_len; 1.211 +- } 1.212 +- } 1.213 +- 1.214 +- if (str_len > INT_MAX) 1.215 +- /* too many digits in fractional part */ 1.216 +- return -1; 1.217 +- 1.218 +- if (str_len != 0) 1.219 +- /* some digits in fractional part */ 1.220 +- { 1.221 +- np->point = MPFR_DECIMAL_POINT; 1.222 +- np->fp_ptr = str + np->ip_size; 1.223 +- np->fp_size = str_len; 1.224 +- } 1.225 ++ --ptr; 1.226 ++ --str_len; 1.227 + } 1.228 + } 1.229 +- else 1.230 +- /* spec.prec digits in fractional part */ 1.231 +- { 1.232 +- if (np->ip_size == exp - 1) 1.233 +- /* the absolute value of the number has been rounded up to a power 1.234 +- of ten. 1.235 +- Insert an additional zero in integral part and put the rest of 1.236 +- them in fractional part. */ 1.237 +- np->ip_trailing_zeros = 1; 1.238 + 1.239 +- if (spec.prec != 0) 1.240 +- { 1.241 +- MPFR_ASSERTD (np->ip_size + np->ip_trailing_zeros == exp); 1.242 +- MPFR_ASSERTD (np->ip_size + spec.prec == nsd); 1.243 ++ if (str_len > 0) 1.244 ++ /* some nonzero digits in fractional part */ 1.245 ++ { 1.246 ++ if (str_len > INT_MAX) 1.247 ++ /* too many digits in fractional part */ 1.248 ++ return -1; 1.249 ++ 1.250 ++ np->point = MPFR_DECIMAL_POINT; 1.251 ++ np->fp_ptr = str; 1.252 ++ np->fp_size = str_len; 1.253 ++ } 1.254 + 1.255 +- np->point = MPFR_DECIMAL_POINT; 1.256 +- np->fp_ptr = str + np->ip_size; 1.257 +- np->fp_size = spec.prec; 1.258 +- } 1.259 +- else if (spec.alt) 1.260 +- np->point = MPFR_DECIMAL_POINT; 1.261 ++ if (keep_trailing_zeros && str_len < spec.prec) 1.262 ++ /* add missing trailing zeros */ 1.263 ++ { 1.264 ++ np->point = MPFR_DECIMAL_POINT; 1.265 ++ np->fp_trailing_zeros = spec.prec - np->fp_size; 1.266 + } 1.267 ++ 1.268 ++ if (spec.alt) 1.269 ++ /* add decimal point even if no digits follow it */ 1.270 ++ np->point = MPFR_DECIMAL_POINT; 1.271 + } 1.272 + 1.273 + return 0; 1.274 +diff -Naur mpfr-3.1.0.orig/src/version.c mpfr-3.1.0/src/version.c 1.275 +--- mpfr-3.1.0.orig/src/version.c 2011-10-03 08:17:09.000000000 +0000 1.276 ++++ mpfr-3.1.0/src/version.c 2011-11-28 12:22:52.000000000 +0000 1.277 +@@ -25,5 +25,5 @@ 1.278 + const char * 1.279 + mpfr_get_version (void) 1.280 + { 1.281 +- return "3.1.0"; 1.282 ++ return "3.1.0-p4"; 1.283 + } 1.284 +diff -Naur mpfr-3.1.0.orig/tests/Makefile.am mpfr-3.1.0/tests/Makefile.am 1.285 +--- mpfr-3.1.0.orig/tests/Makefile.am 2011-10-03 08:17:14.000000000 +0000 1.286 ++++ mpfr-3.1.0/tests/Makefile.am 2011-10-03 08:17:14.000000000 +0000 1.287 +@@ -65,8 +65,24 @@ 1.288 + TESTS = $(check_PROGRAMS) 1.289 + TESTS_ENVIRONMENT = MPFR_QUIET=1 $(VALGRIND) 1.290 + 1.291 +-# Option to prevent libtool from generating wrapper scripts for the tests. 1.292 ++# The -no-install option prevents libtool from generating wrapper scripts 1.293 ++# for the tests. 1.294 + # This is useful to easily run the test scripts under valgrind or gdb. 1.295 + # See discussion http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/28033 1.296 + # http://article.gmane.org/gmane.comp.lib.gnulib.bugs/28140 in particular. 1.297 +-AM_LDFLAGS = -no-install 1.298 ++# 1.299 ++# The -L$(top_builddir)/src/.libs option is necessary for some platforms, 1.300 ++# such as HP-UX, when --with-gmp or --with-gmp-lib is used and an old MPFR 1.301 ++# library is already installed in the corresponding lib directory: its 1.302 ++# purpose is to make sure that the local .libs comes first in the library 1.303 ++# search path (otherwise the tests are linked against the old MPFR library 1.304 ++# by the LINK command -- see the generated Makefile). See: 1.305 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00042.html 1.306 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00043.html 1.307 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00044.html 1.308 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00066.html 1.309 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00065.html 1.310 ++# and 1.311 ++# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9728 1.312 ++# 1.313 ++AM_LDFLAGS = -no-install -L$(top_builddir)/src/.libs 1.314 +diff -Naur mpfr-3.1.0.orig/tests/Makefile.in mpfr-3.1.0/tests/Makefile.in 1.315 +--- mpfr-3.1.0.orig/tests/Makefile.in 2011-10-03 08:17:35.000000000 +0000 1.316 ++++ mpfr-3.1.0/tests/Makefile.in 2011-10-03 08:17:35.000000000 +0000 1.317 +@@ -1124,11 +1124,27 @@ 1.318 + TESTS = $(check_PROGRAMS) 1.319 + TESTS_ENVIRONMENT = MPFR_QUIET=1 $(VALGRIND) 1.320 + 1.321 +-# Option to prevent libtool from generating wrapper scripts for the tests. 1.322 ++# The -no-install option prevents libtool from generating wrapper scripts 1.323 ++# for the tests. 1.324 + # This is useful to easily run the test scripts under valgrind or gdb. 1.325 + # See discussion http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/28033 1.326 + # http://article.gmane.org/gmane.comp.lib.gnulib.bugs/28140 in particular. 1.327 +-AM_LDFLAGS = -no-install 1.328 ++# 1.329 ++# The -L$(top_builddir)/src/.libs option is necessary for some platforms, 1.330 ++# such as HP-UX, when --with-gmp or --with-gmp-lib is used and an old MPFR 1.331 ++# library is already installed in the corresponding lib directory: its 1.332 ++# purpose is to make sure that the local .libs comes first in the library 1.333 ++# search path (otherwise the tests are linked against the old MPFR library 1.334 ++# by the LINK command -- see the generated Makefile). See: 1.335 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00042.html 1.336 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00043.html 1.337 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00044.html 1.338 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00066.html 1.339 ++# http://websympa.loria.fr/wwsympa/arc/mpfr/2011-10/msg00065.html 1.340 ++# and 1.341 ++# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9728 1.342 ++# 1.343 ++AM_LDFLAGS = -no-install -L$(top_builddir)/src/.libs 1.344 + all: all-am 1.345 + 1.346 + .SUFFIXES: 1.347 +diff -Naur mpfr-3.1.0.orig/tests/trandom.c mpfr-3.1.0/tests/trandom.c 1.348 +--- mpfr-3.1.0.orig/tests/trandom.c 2011-10-03 08:17:14.000000000 +0000 1.349 ++++ mpfr-3.1.0/tests/trandom.c 2011-11-28 12:22:52.000000000 +0000 1.350 +@@ -114,21 +114,29 @@ 1.351 + mpfr_t x; 1.352 + gmp_randstate_t s; 1.353 + 1.354 ++#if __MPFR_GMP(4,2,0) 1.355 ++# define C1 "0.895943" 1.356 ++# define C2 "0.848824" 1.357 ++#else 1.358 ++# define C1 "0.479652" 1.359 ++# define C2 "0.648529" 1.360 ++#endif 1.361 ++ 1.362 + gmp_randinit_default (s); 1.363 + gmp_randseed_ui (s, 42); 1.364 + mpfr_init2 (x, 17); 1.365 + mpfr_urandomb (x, s); 1.366 +- if (mpfr_cmp_str1 (x, "0.895943") != 0) 1.367 ++ if (mpfr_cmp_str1 (x, C1) != 0) 1.368 + { 1.369 +- printf ("Error in bug20100914, expected 0.895943, got "); 1.370 ++ printf ("Error in bug20100914, expected " C1 ", got "); 1.371 + mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); 1.372 + printf ("\n"); 1.373 + exit (1); 1.374 + } 1.375 + mpfr_urandomb (x, s); 1.376 +- if (mpfr_cmp_str1 (x, "0.848824") != 0) 1.377 ++ if (mpfr_cmp_str1 (x, C2) != 0) 1.378 + { 1.379 +- printf ("Error in bug20100914, expected 0.848824, got "); 1.380 ++ printf ("Error in bug20100914, expected " C2 ", got "); 1.381 + mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); 1.382 + printf ("\n"); 1.383 + exit (1); 1.384 +diff -Naur mpfr-3.1.0.orig/tests/tsprintf.c mpfr-3.1.0/tests/tsprintf.c 1.385 +--- mpfr-3.1.0.orig/tests/tsprintf.c 2011-10-03 08:17:14.000000000 +0000 1.386 ++++ mpfr-3.1.0/tests/tsprintf.c 2011-11-03 15:15:11.000000000 +0000 1.387 +@@ -475,6 +475,18 @@ 1.388 + check_sprintf ("-1.", "%- #0.1RG", x); 1.389 + 1.390 + /* precision zero */ 1.391 ++ mpfr_set_d (x, 9.5, MPFR_RNDN); 1.392 ++ check_sprintf ("9", "%.0RDf", x); 1.393 ++ check_sprintf ("10", "%.0RUf", x); 1.394 ++ 1.395 ++ mpfr_set_d (x, 19.5, MPFR_RNDN); 1.396 ++ check_sprintf ("19", "%.0RDf", x); 1.397 ++ check_sprintf ("20", "%.0RUf", x); 1.398 ++ 1.399 ++ mpfr_set_d (x, 99.5, MPFR_RNDN); 1.400 ++ check_sprintf ("99", "%.0RDf", x); 1.401 ++ check_sprintf ("100", "%.0RUf", x); 1.402 ++ 1.403 + mpfr_set_d (x, -9.5, MPFR_RNDN); 1.404 + check_sprintf ("-10", "%.0RDf", x); 1.405 + check_sprintf ("-10", "%.0RYf", x); 1.406 +@@ -1078,6 +1090,23 @@ 1.407 + mpfr_clear (x); 1.408 + } 1.409 + 1.410 ++static void 1.411 ++bug20111102 (void) 1.412 ++{ 1.413 ++ mpfr_t t; 1.414 ++ char s[100]; 1.415 ++ 1.416 ++ mpfr_init2 (t, 84); 1.417 ++ mpfr_set_str (t, "999.99999999999999999999", 10, MPFR_RNDN); 1.418 ++ mpfr_sprintf (s, "%.20RNg", t); 1.419 ++ if (strcmp (s, "1000") != 0) 1.420 ++ { 1.421 ++ printf ("Error in bug20111102, expected 1000, got %s\n", s); 1.422 ++ exit (1); 1.423 ++ } 1.424 ++ mpfr_clear (t); 1.425 ++} 1.426 ++ 1.427 + /* In particular, the following test makes sure that the rounding 1.428 + * for %Ra and %Rb is not done on the MPFR number itself (as it 1.429 + * would overflow). Note: it has been reported on comp.std.c that 1.430 +@@ -1161,6 +1190,7 @@ 1.431 + locale = setlocale (LC_ALL, "C"); 1.432 + #endif 1.433 + 1.434 ++ bug20111102 (); 1.435 + native_types (); 1.436 + hexadecimal (); 1.437 + binary (); 1.438 +diff -Naur mpfr-3.1.0.orig/tests/turandom.c mpfr-3.1.0/tests/turandom.c 1.439 +--- mpfr-3.1.0.orig/tests/turandom.c 2011-10-03 08:17:14.000000000 +0000 1.440 ++++ mpfr-3.1.0/tests/turandom.c 2011-11-28 12:22:52.000000000 +0000 1.441 +@@ -160,23 +160,29 @@ 1.442 + mpfr_t x; 1.443 + gmp_randstate_t s; 1.444 + 1.445 ++#if __MPFR_GMP(4,2,0) 1.446 ++# define C1 "0.8488312" 1.447 ++# define C2 "0.8156509" 1.448 ++#else 1.449 ++# define C1 "0.6485367" 1.450 ++# define C2 "0.9362717" 1.451 ++#endif 1.452 ++ 1.453 + gmp_randinit_default (s); 1.454 + gmp_randseed_ui (s, 42); 1.455 + mpfr_init2 (x, 17); 1.456 + mpfr_urandom (x, s, MPFR_RNDN); 1.457 +- /* the following values are obtained on a 32-bit computer, we should get 1.458 +- the same values on a 64-bit computer */ 1.459 +- if (mpfr_cmp_str1 (x, "0.8488312") != 0) 1.460 ++ if (mpfr_cmp_str1 (x, C1) != 0) 1.461 + { 1.462 +- printf ("Error in bug20100914, expected 0.8488312, got "); 1.463 ++ printf ("Error in bug20100914, expected " C1 ", got "); 1.464 + mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); 1.465 + printf ("\n"); 1.466 + exit (1); 1.467 + } 1.468 + mpfr_urandom (x, s, MPFR_RNDN); 1.469 +- if (mpfr_cmp_str1 (x, "0.8156509") != 0) 1.470 ++ if (mpfr_cmp_str1 (x, C2) != 0) 1.471 + { 1.472 +- printf ("Error in bug20100914, expected 0.8156509, got "); 1.473 ++ printf ("Error in bug20100914, expected " C2 ", got "); 1.474 + mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); 1.475 + printf ("\n"); 1.476 + exit (1);