diff options
author | Joseph Myers <joseph@codesourcery.com> | 2012-09-06 15:33:06 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2012-09-06 15:33:06 +0000 |
commit | ed8c2ecd21d07e9e116fc494742a2b3af8193144 (patch) | |
tree | 40c9b36f55c6a5e2350a77c4f6437ee4a14b90c5 | |
parent | 053406fa70d071423c43465d60042d84c24f94cf (diff) | |
download | glibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.zip glibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.tar.gz glibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.tar.bz2 |
Fix strtod test for values above maximum for IBM long double.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | stdlib/gen-tst-strtod-round.c | 15 | ||||
-rw-r--r-- | stdlib/tst-strtod-round.c | 4 |
3 files changed, 23 insertions, 3 deletions
@@ -1,3 +1,10 @@ +2012-09-06 Joseph Myers <joseph@codesourcery.com> + + * stdlib/gen-tst-strtod-round.c: Include <assert.h>. + (round_str): Handle values above the maximum for IBM long double + as inexact. + * stdlib/tst-strtod-round.c (tests): Regenerated. + 2012-09-06 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * sysdeps/s390/s390-32/multiarch/Makefile: Remove -mzarch diff --git a/stdlib/gen-tst-strtod-round.c b/stdlib/gen-tst-strtod-round.c index f4ad270..56aafab 100644 --- a/stdlib/gen-tst-strtod-round.c +++ b/stdlib/gen-tst-strtod-round.c @@ -18,6 +18,7 @@ <http://www.gnu.org/licenses/>. */ #define _GNU_SOURCE +#include <assert.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> @@ -65,7 +66,19 @@ round_str (const char *s, const char *suffix, mpfr_init (f); int r = string_to_fp (f, s, MPFR_RNDD); if (need_exact) - mpfr_printf ("\t%s,\n", r ? "false" : "true"); + { + assert (prec == 106 && emin == -1073 && emax == 1024); + /* The maximum value in IBM long double has discontiguous + mantissa bits. */ + mpfr_t max_value; + mpfr_init2 (max_value, 107); + mpfr_set_str (max_value, "0x1.fffffffffffff7ffffffffffffcp+1023", 0, + MPFR_RNDN); + if (mpfr_cmpabs (f, max_value) > 0) + r = 1; + mpfr_printf ("\t%s,\n", r ? "false" : "true"); + mpfr_clear (max_value); + } print_fp (f, suffix, ",\n"); string_to_fp (f, s, MPFR_RNDN); print_fp (f, suffix, ",\n"); diff --git a/stdlib/tst-strtod-round.c b/stdlib/tst-strtod-round.c index 1edeff6..c6ad126 100644 --- a/stdlib/tst-strtod-round.c +++ b/stdlib/tst-strtod-round.c @@ -1927,7 +1927,7 @@ static const struct test tests[] = { 0xf.ffffffffffffcp+1020L, 0xf.ffffffffffffcp+1020L, 0xf.ffffffffffffcp+1020L, - true, + false, 0xf.ffffffffffffcp+1020L, 0xf.ffffffffffffcp+1020L, 0xf.ffffffffffffcp+1020L, @@ -2032,7 +2032,7 @@ static const struct test tests[] = { -0xf.ffffffffffffcp+1020L, -0xf.ffffffffffffcp+1020L, -0xf.ffffffffffffcp+1020L, - true, + false, -0xf.ffffffffffffcp+1020L, -0xf.ffffffffffffcp+1020L, -0xf.ffffffffffffcp+1020L, |