Fix libm-test.inc ulps calculation for subnormals (bug 14064).
authorJoseph Myers <joseph@codesourcery.com>
Sun, 6 May 2012 18:20:21 +0000 (18:20 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Sun, 6 May 2012 18:20:21 +0000 (18:20 +0000)
ChangeLog
NEWS
math/libm-test.inc

index af9aac0..4109a75 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/NEWS b/NEWS
index 036d8d4..66b1041 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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:
 
index 59192ed..d65c3e5 100644 (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. */