]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix acosf underflow (bug 14153).
authorJoseph Myers <joseph@codesourcery.com>
Fri, 25 May 2012 11:07:07 +0000 (11:07 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 25 May 2012 11:07:07 +0000 (11:07 +0000)
ChangeLog
NEWS
math/libm-test.inc
sysdeps/ieee754/flt-32/e_acosf.c

index c6c2cad7257e2ea0f1a4d3cc35ef67d37d87a09b..ceb3f5af7755e0eaf1ff0f23b29f48627c7dd6eb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-05-24  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #14153]
+       * sysdeps/ieee754/flt-32/e_acosf.c (__ieee754_acosf): Return pi/2
+       for |x| <= 2**-26, not 2**-57.
+       * math/libm-test.inc (acos_test): Do not allow spurious underflow
+       exception.
+
 2012-05-24  Jeff Law  <law@redhat.com>
 
        * stdio-common/Makefile (tests): Add bug25.
diff --git a/NEWS b/NEWS
index 7ccfb903ef61554d980bbe09faa30deaaf0c5176..932934dbc834f60a371a962862d1aebdec8cab3a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -28,7 +28,7 @@ Version 2.16
   13941, 13942, 13954, 13955, 13956, 13963, 13967, 13968, 13970, 13973,
   13979, 13983, 13986, 14012, 14027, 14033, 14034, 14036, 14040, 14043,
   14044, 14049, 14053, 14055, 14059, 14064, 14080, 14083, 14103, 14104,
-  14109, 14122, 14123
+  14109, 14122, 14123, 14153
 
 * ISO C11 support:
 
index 5946ca890b43429fbcf68b56a0e2677cd03abec7..ed13f53ec87feb8d214d0337d2d8470317a80ab8 100644 (file)
@@ -804,8 +804,7 @@ acos_test (void)
   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
-  /* Bug 14153: spurious exception may occur.  */
-  TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L, UNDERFLOW_EXCEPTION_OK_FLOAT);
+  TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
   TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
   TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
index c0f1d4ea743e6f24064e12b5729a40121aaee74e..6f792f6604cdab3fca51a5546e086d2e40df1f15 100644 (file)
@@ -46,7 +46,7 @@ __ieee754_acosf(float x)
            return (x-x)/(x-x);         /* acos(|x|>1) is NaN */
        }
        if(ix<0x3f000000) {     /* |x| < 0.5 */
-           if(ix<=0x23000000) return pio2_hi+pio2_lo;/*if|x|<2**-57*/
+           if(ix<=0x32800000) return pio2_hi+pio2_lo;/*if|x|<=2**-26*/
            z = x*x;
            p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
            q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));