about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-10-31 20:44:59 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-10-31 20:44:59 +0000
commit16a0e2ec87f104961b88173fe8c96f9348850b0d (patch)
treeafcb3c9f59e4f7b556a3fb05f6aebf75bf4bd858
parent0eb69512575e1e2ccfec4c4489fa3fb6201d38d1 (diff)
downloadglibc-16a0e2ec87f104961b88173fe8c96f9348850b0d.tar.gz
glibc-16a0e2ec87f104961b88173fe8c96f9348850b0d.tar.xz
glibc-16a0e2ec87f104961b88173fe8c96f9348850b0d.zip
Fix ldbl-128ibm atan2l for x near 1.
-rw-r--r--ChangeLog5
-rw-r--r--NEWS4
-rw-r--r--math/libm-test.inc3
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_atan2l.c3
4 files changed, 12 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index fd72f40445..e14bac6b3e 100644
--- 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 fe569e1240..8b691e5e7c 100644
--- 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
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 91019a1219..9c773927cb 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -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);
 }
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c b/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
index fe5c8bd8dc..3e0535561c 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
@@ -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 */