Fix BZ 2549: Denormalized return

Andreas Jaeger aj@suse.de
Sat Oct 27 14:56:00 GMT 2007


The appended patch handles denormalized values in libm-test.

Ok to commit?

Andreas

2006-04-14  H.J. Lu  <hongjiu.lu@intel.com>

	[BZ #2549]
	* math/libm-test.inc (check_float_internal): Support
	denormalized return.

--- math/libm-test.inc.ulp	2006-04-14 09:15:03.000000000 -0700
+++ math/libm-test.inc	2006-04-14 10:28:11.000000000 -0700
@@ -487,11 +487,23 @@ check_float_internal (const char *test_n
   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

-- 
 Andreas Jaeger, Director Platform / openSUSE, aj@suse.de
  SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg)
   Maxfeldstr. 5, 90409 Nürnberg, Germany
    GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 193 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-hacker/attachments/20071027/007665ed/attachment.sig>


More information about the Libc-hacker mailing list