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 fd72f40445ba0766047a2066f8b141cce1632252..e14bac6b3eab4c002340c4e99048b8c9f5d1b1d1 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 fe569e12407977e875c2d3685176e1d0719fecc5..8b691e5e7cb698da9ff25b0f55df042948dc08be 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 91019a121946aac2298eaa96a2518e916a9d1469..9c773927cb23c9b3ba9192af8975c94fcbd49b88 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 fe5c8bd8dc29c387b5db89be51230b7cc28a00df..3e0535561cb69fa43b1b5b604d970f94f0604778 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 */