Fix ldbl-128ibm atan2l for x near 1.
authorJoseph Myers <joseph@codesourcery.com>
Wed, 31 Oct 2012 20:44:59 +0000 (20:44 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 31 Oct 2012 20:44:59 +0000 (20:44 +0000)
ChangeLog
NEWS
math/libm-test.inc
sysdeps/ieee754/ldbl-128ibm/e_atan2l.c

index fd72f40..e14bac6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2012-10-31  Joseph Myers  <joseph@codesourcery.com>
 
+       [BZ #14610]
+       * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c (__ieee754_atan2l): Check
+       for low part of x being zero before using __atanl (y).
+       * math/libm-test.inc (atan2_test): Add another test.
+
        * manual/install.texi (Configuring and compiling): Document
        general use of test-wrapper and test-wrapper-env.
        * INSTALL: Regenerated.
diff --git a/NEWS b/NEWS
index fe569e1..8b691e5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -16,8 +16,8 @@ Version 2.17
   14303, 14307, 14328, 14331, 14336, 14337, 14347, 14349, 14376, 14417,
   14459, 14476, 14477, 14505, 14510, 14516, 14518, 14519, 14530, 14532,
   14538, 14543, 14544, 14545, 14557, 14562, 14568, 14576, 14579, 14583,
-  14587, 14595, 14602, 14621, 14638, 14645, 14648, 14652, 14660, 14661,
-  14683, 14694, 14716, 14743, 14767, 14783.
+  14587, 14595, 14602, 14610, 14621, 14638, 14645, 14648, 14652, 14660,
+  14661, 14683, 14694, 14716, 14743, 14767, 14783.
 
 * Support for STT_GNU_IFUNC symbols added for s390 and s390x.
   Optimized versions of memcpy, memset, and memcmp added for System z10 and
index 91019a1..9c77392 100644 (file)
@@ -1297,6 +1297,9 @@ atan2_test (void)
   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
 
   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
+  TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
+#endif
 
   END (atan2);
 }
index fe5c8bd..3e05355 100644 (file)
@@ -65,7 +65,8 @@ __ieee754_atan2l(long double y, long double x)
        if(((ix)>0x7ff0000000000000LL)||
           ((iy)>0x7ff0000000000000LL)) /* x or y is NaN */
           return x+y;
-       if(((hx-0x3ff0000000000000LL))==0) return __atanl(y);   /* x=1.0L */
+       if(((hx-0x3ff0000000000000LL))==0
+          && (lx&0x7fffffffffffffff)==0) return __atanl(y);   /* x=1.0L */
        m = ((hy>>63)&1)|((hx>>62)&2);  /* 2*sign(x)+sign(y) */
 
     /* when y = 0 */