summaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-05-04 10:05:57 +0000
committerJakub Jelinek <jakub@redhat.com>2007-05-04 10:05:57 +0000
commit2a0a747e57ec96bab9d4a6b7c0b32df82a41316e (patch)
tree002d92f89d7109abc1c2ebe7f113f8dee0dc3034 /math
parentaf5726aed8a0c87d7f29570641cf0acb6a92f918 (diff)
Updated to fedora-glibc-20070504T0917cvs/fedora-glibc-2_5_90-22
Diffstat (limited to 'math')
-rw-r--r--math/test-misc.c80
1 files changed, 80 insertions, 0 deletions
diff --git a/math/test-misc.c b/math/test-misc.c
index 862e11f0c3..a1ad6885db 100644
--- a/math/test-misc.c
+++ b/math/test-misc.c
@@ -1235,5 +1235,85 @@ main (void)
}
#endif
+#if !defined NO_LONG_DOUBLE && LDBL_MANT_DIG >= DBL_MANT_DIG + 4
+ int oldmode = fegetround ();
+ int j;
+ for (j = 0; j < 4; j++)
+ {
+ int mode;
+ int i;
+ int k = 0;
+ const char *mstr;
+ switch (j)
+ {
+#ifdef FE_TONEAREST
+ case 0:
+ mode = FE_TONEAREST;
+ mstr = "nearest";
+ k = 8;
+ break;
+#endif
+#ifdef FE_DOWNWARD
+ case 1:
+ mode = FE_DOWNWARD;
+ mstr = "-inf";
+ break;
+#endif
+#ifdef FE_UPWARD
+ case 2:
+ mode = FE_UPWARD;
+ mstr = "+inf";
+ k = 15;
+ break;
+#endif
+#ifdef FE_TOWARDZERO
+ case 3:
+ mode = FE_TOWARDZERO;
+ mstr = "0";
+ break;
+#endif
+ default:
+ continue;
+ }
+
+ volatile long double ld5 = nextafter (0.0, 1.0) / 16.0L;
+ volatile double d5;
+ (void) &ld5;
+ for (i = 0; i <= 32; i++)
+ {
+ if (fesetround (mode))
+ {
+ printf ("failed to set rounding mode to %s\n", mstr);
+ result = 1;
+ break;
+ }
+ d5 = ld5 * i;
+ (void) &d5;
+ fesetround (oldmode);
+ if (d5 != ((j == 0 && i == 8) ? 0 : (i + k) / 16)
+ * nextafter (0.0, 1.0))
+ {
+ printf ("%La incorrectly rounded to %s as %a\n",
+ ld5 * i, mstr, d5);
+ result = 1;
+ }
+ }
+ }
+
+ volatile long double ld7 = nextafterl (0.0L, 1.0L);
+ volatile double d7;
+ (void) &ld7;
+ fesetround (FE_UPWARD);
+ d7 = ld7;
+ (void) &d7;
+ fesetround (oldmode);
+
+ if (d7 != nextafter (0.0, 1.0))
+ {
+ printf ("%La incorrectly rounded upward to %a\n", ld7, d7);
+ result = 1;
+ }
+#endif
+
return result;
}