aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--math/libm-test.inc23
2 files changed, 24 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index c611582..91942fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-04-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ [BZ #2549]
+ * math/libm-test.inc (check_float_internal): Support
+ denormalized return.
+
2007-10-23 Andreas Jaeger <aj@suse.de>
[BZ #5208]
diff --git a/math/libm-test.inc b/math/libm-test.inc
index da68d40..e698923 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -487,11 +487,24 @@ check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
else
{
diff = FUNC(fabs) (computed - expected);
- /* ilogb (0) isn't allowed. */
- if (expected == 0.0)
- ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
- else
- ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
+ switch (fpclassify (expected))
+ {
+ case FP_ZERO:
+ /* ilogb (0) isn't allowed. */
+ ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
+ break;
+ case FP_NORMAL:
+ ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
+ break;
+ case FP_SUBNORMAL:
+ ulp = (FUNC(ldexp) (diff, MANT_DIG)
+ / FUNC(ldexp) (1.0, FUNC(ilogb) (expected)));
+ break;
+ default:
+ /* It should never happen. */
+ abort ();
+ break;
+ }
set_max_error (ulp, curr_max_error);
print_diff = 1;
if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0