about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2013-05-09 21:30:08 +0000
committerJoseph Myers <joseph@codesourcery.com>2013-05-09 21:30:08 +0000
commited41ffefc3f947f14d565ea8d239ff2d31f6a7fe (patch)
tree6a83a53b6d441694683731cf4c3568a37581e388
parentd0213cd0b629cae95ed9607fcf26793a3a0d686c (diff)
downloadglibc-ed41ffefc3f947f14d565ea8d239ff2d31f6a7fe.tar.gz
glibc-ed41ffefc3f947f14d565ea8d239ff2d31f6a7fe.tar.xz
glibc-ed41ffefc3f947f14d565ea8d239ff2d31f6a7fe.zip
Fix ldbl-128ibm cos range reduction near pi/2 (bug 15359).
-rw-r--r--ChangeLog5
-rw-r--r--NEWS4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c10
3 files changed, 12 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 3ed5f445b2..619ce644f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2013-05-09  Joseph Myers  <joseph@codesourcery.com>
 
+	[BZ #15359]
+	* sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (c): Use 106 bits for
+	high part of pi/2.
+	(__ieee754_rem_pio2l): Update comments.
+
 	[BZ #15429]
 	* sysdeps/ieee754/ldbl-128/e_rem_pio2l.c (c): Use 113 bits for
 	high part of pi/2.
diff --git a/NEWS b/NEWS
index 70e7ecf669..74124949a8 100644
--- a/NEWS
+++ b/NEWS
@@ -15,8 +15,8 @@ Version 2.18
   14994, 14996, 15003, 15006, 15007, 15020, 15023, 15036, 15054, 15055,
   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, 15429.
+  15336, 15337, 15342, 15346, 15359, 15361, 15366, 15380, 15394, 15405,
+  15406, 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-128ibm/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c
index 692ae24930..6a72d6a853 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c
@@ -185,13 +185,13 @@ static const int32_t two_over_pi[] = {
 };
 
 static const long double c[] = {
-/* 93 bits of pi/2 */
+/* 106 bits of pi/2 */
 #define PI_2_1 c[0]
- 1.57079632679489661923132169155131424e+00L, /* 3fff921fb54442d18469898cc5100000 */
+ 0x1.921fb54442d18469898cc517018p+0L,
 
 /* pi/2 - PI_2_1 */
 #define PI_2_1t c[1]
- 8.84372056613570112025531863263659260e-29L, /* 3fa1c06e0e68948127044533e63a0106 */
+ 0x3.839a252049c1114cf98e804178p-108L,
 };
 
 int32_t __ieee754_rem_pio2l(long double x, long double *y)
@@ -216,7 +216,7 @@ int32_t __ieee754_rem_pio2l(long double x, long double *y)
     {
       if (hx > 0)
 	{
-	  /* 113 + 93 bit PI is ok */
+	  /* 106 + 106 bit PI is ok */
 	  z = x - PI_2_1;
 	  y[0] = z - PI_2_1t;
 	  y[1] = (z - y[0]) - PI_2_1t;
@@ -224,7 +224,7 @@ int32_t __ieee754_rem_pio2l(long double x, long double *y)
 	}
       else
         {
-	  /* 113 + 93 bit PI is ok */
+	  /* 106 + 106 bit PI is ok */
 	  z = x + PI_2_1;
 	  y[0] = z + PI_2_1t;
 	  y[1] = (z - y[0]) + PI_2_1t;