The appended patch handles denormalized values in libm-test. Ok to commit? Andreas 2006-04-14 H.J. Lu [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