aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-09-06 15:33:06 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-09-06 15:33:06 +0000
commited8c2ecd21d07e9e116fc494742a2b3af8193144 (patch)
tree40c9b36f55c6a5e2350a77c4f6437ee4a14b90c5
parent053406fa70d071423c43465d60042d84c24f94cf (diff)
downloadglibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.tar
glibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.tar.gz
glibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.tar.bz2
glibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.zip
Fix strtod test for values above maximum for IBM long double.
-rw-r--r--ChangeLog7
-rw-r--r--stdlib/gen-tst-strtod-round.c15
-rw-r--r--stdlib/tst-strtod-round.c4
3 files changed, 23 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index b978444773..a48a5cb079 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 f4ad270152..56aafab02e 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 1edeff6c17..c6ad126873 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,