Fix libm-test.inc ulps calculation for subnormals (bug 14064).

This commit is contained in:
Joseph Myers 2012-05-06 18:20:21 +00:00
parent 62881be42d
commit 6c23e11c4d
3 changed files with 10 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2012-05-06 Joseph Myers <joseph@codesourcery.com>
[BZ #14064]
* math/libm-test.inc (check_float_internal): Correct ulp
calculation for subnormal expected results.
2012-05-06 Andreas Jaeger <aj@suse.de>
* Makeconfig (+math-flags): New, set to -frounding-math.

2
NEWS
View File

@ -23,7 +23,7 @@ Version 2.16
13854, 13871, 13872, 13873, 13879, 13883, 13886, 13892, 13895, 13908,
13910, 13911, 13912, 13913, 13915, 13916, 13917, 13918, 13919, 13920,
13921, 13922, 13924, 13926, 13927, 13928, 13938, 13941, 13942, 13963,
13967, 13970, 13973, 14027, 14033, 14034, 14040, 14049, 14055
13967, 13970, 13973, 14027, 14033, 14034, 14040, 14049, 14055, 14064
* ISO C11 support:

View File

@ -503,8 +503,9 @@ check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
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)));
/* 1ulp for a subnormal value, shifted by MANT_DIG, is the
least normal value. */
ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
break;
default:
/* It should never happen. */