about summary refs log tree commit diff
path: root/stdlib/gen-tst-strtod-round.c
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 /stdlib/gen-tst-strtod-round.c
parent053406fa70d071423c43465d60042d84c24f94cf (diff)
downloadglibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.tar.gz
glibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.tar.xz
glibc-ed8c2ecd21d07e9e116fc494742a2b3af8193144.zip
Fix strtod test for values above maximum for IBM long double.
Diffstat (limited to 'stdlib/gen-tst-strtod-round.c')
-rw-r--r--stdlib/gen-tst-strtod-round.c15
1 files changed, 14 insertions, 1 deletions
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");