regex: avoid compilation failure with upcoming gcc-4.4
[gnulib.git] / lib / tanl.c
index b87d0dd..60e6637 100644 (file)
  * ====================================================
  */
 
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
 /* tanl(x)
  * Return tangent function of x.
  *
  *     TRIG(x) returns trig(x) nearly rounded
  */
 
-#include <math.h>
-
-#include "mathl.h"
-
 #include "trigl.h"
 #ifdef HAVE_SINL
 #ifdef HAVE_COSL
@@ -123,15 +124,15 @@ long double
 kernel_tanl (long double x, long double y, int iy)
 {
   long double z, r, v, w, s, u, u1;
-  int flag, sign;
-
-       sign = 1;
-      if (x < 0)
-       {
-         x = -x;
-         y = -y;
-         sign = -1;
-       }
+  int invert = 0, sign;
+
+  sign = 1;
+  if (x < 0)
+    {
+      x = -x;
+      y = -y;
+      sign = -1;
+    }
 
   if (x < 0.000000000000000006938893903907228377647697925567626953125L) /* x < 2**-57 */
     {
@@ -145,7 +146,7 @@ kernel_tanl (long double x, long double y, int iy)
     }
   if (x >= 0.6743316650390625) /* |x| >= 0.6743316650390625 */
     {
-      flag = 1;
+      invert = 1;
 
       z = pio4hi - x;
       w = pio4lo - y;
@@ -161,7 +162,7 @@ kernel_tanl (long double x, long double y, int iy)
   r = y + z * (s * r + y);
   r += TH * s;
   w = x + r;
-  if (flag)
+  if (invert)
     {
       v = (long double) iy;
       w = (v - 2.0 * (x - (w * w / (w + v) - r)));
@@ -190,13 +191,17 @@ tanl (long double x)
   long double y[2], z = 0.0L;
   int n;
 
+  /* tanl(NaN) is NaN */
+  if (isnanl (x))
+    return x;
+
   /* |x| ~< pi/4 */
   if (x >= -0.7853981633974483096156608458198757210492 &&
       x <= 0.7853981633974483096156608458198757210492)
     return kernel_tanl (x, z, 1);
 
-  /* tanl(Inf or NaN) is NaN, tanl(0) is 0 */
-  else if (x + x == x || x != x)
+  /* tanl(Inf) is NaN, tanl(0) is 0 */
+  else if (x + x == x)
     return x - x;              /* NaN */
 
   /* argument reduction needed */