aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-05-06 18:20:21 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-05-06 18:20:21 +0000
commit6c23e11c4dd036e65073d4e4d6bc971a445deaea (patch)
tree1b9c56995492fdc9fc46f0609769b75b494eacc4
parent62881be42dd5a81785f630658c6762b214056978 (diff)
downloadglibc-6c23e11c4dd036e65073d4e4d6bc971a445deaea.zip
glibc-6c23e11c4dd036e65073d4e4d6bc971a445deaea.tar.gz
glibc-6c23e11c4dd036e65073d4e4d6bc971a445deaea.tar.bz2
Fix libm-test.inc ulps calculation for subnormals (bug 14064).
-rw-r--r--ChangeLog6
-rw-r--r--NEWS2
-rw-r--r--math/libm-test.inc5
3 files changed, 10 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index af9aac0..4109a75 100644
--- 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
--- 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:
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 59192ed..d65c3e5 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -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. */