about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2013-05-09 21:28:54 +0000
committerJoseph Myers <joseph@codesourcery.com>2013-05-09 21:28:54 +0000
commitd0213cd0b629cae95ed9607fcf26793a3a0d686c (patch)
tree701958f07ec3bce5acf427e70416297fca5e7ea0
parent0d3e777af2f2818111e2699982f64af16ac032b5 (diff)
downloadglibc-d0213cd0b629cae95ed9607fcf26793a3a0d686c.tar.gz
glibc-d0213cd0b629cae95ed9607fcf26793a3a0d686c.tar.xz
glibc-d0213cd0b629cae95ed9607fcf26793a3a0d686c.zip
Fix ldbl-128 cos range reduction near pi/2 (bug 15429).
-rw-r--r--ChangeLog5
-rw-r--r--NEWS2
-rw-r--r--sysdeps/ieee754/ldbl-128/e_rem_pio2l.c10
3 files changed, 11 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index b6eae595fc..3ed5f445b2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2013-05-09  Joseph Myers  <joseph@codesourcery.com>
 
+	[BZ #15429]
+	* sysdeps/ieee754/ldbl-128/e_rem_pio2l.c (c): Use 113 bits for
+	high part of pi/2.
+	(__ieee754_rem_pio2l): Update comments.
+
 	* math/libm-test.inc (M_SQRT_2_2): Remove macro.
 	(csqrt_test): Use M_SQRT1_2l instead of M_SQRT_2_2.
 
diff --git a/NEWS b/NEWS
index 1a02e19f2b..70e7ecf669 100644
--- a/NEWS
+++ b/NEWS
@@ -16,7 +16,7 @@ Version 2.18
   15062, 15078, 15084, 15085, 15086, 15160, 15214, 15221, 15232, 15234,
   15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335,
   15336, 15337, 15342, 15346, 15361, 15366, 15380, 15394, 15405, 15406,
-  15409, 15416, 15418, 15419, 15423, 15426.
+  15409, 15416, 15418, 15419, 15423, 15426, 15429.
 
 * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
   #15078).
diff --git a/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c
index 84846fdc3d..ee856acd5f 100644
--- a/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c
+++ b/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c
@@ -184,13 +184,13 @@ static const int32_t two_over_pi[] = {
 };
 
 static const long double c[] = {
-/* 93 bits of pi/2 */
+/* 113 bits of pi/2 */
 #define PI_2_1 c[0]
- 1.57079632679489661923132169155131424e+00L, /* 3fff921fb54442d18469898cc5100000 */
+ 0x1.921fb54442d18469898cc51701b8p+0L,
 
 /* pi/2 - PI_2_1 */
 #define PI_2_1t c[1]
- 8.84372056613570112025531863263659260e-29L, /* 3fa1c06e0e68948127044533e63a0106 */
+ 0x3.9a252049c1114cf98e804177d4c8p-116L,
 };
 
 int32_t __ieee754_rem_pio2l(long double x, long double *y)
@@ -213,7 +213,7 @@ int32_t __ieee754_rem_pio2l(long double x, long double *y)
     {
       if (hx > 0)
 	{ 
-	  /* 113 + 93 bit PI is ok */
+	  /* 113 + 113 bit PI is ok */
 	  z = x - PI_2_1;
 	  y[0] = z - PI_2_1t;
 	  y[1] = (z - y[0]) - PI_2_1t;
@@ -221,7 +221,7 @@ int32_t __ieee754_rem_pio2l(long double x, long double *y)
 	}
       else
         {
-	  /* 113 + 93 bit PI is ok */
+	  /* 113 + 113 bit PI is ok */
 	  z = x + PI_2_1;
 	  y[0] = z + PI_2_1t;
 	  y[1] = (z - y[0]) + PI_2_1t;