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