diff lib/tanl.c @ 8563:c3d334708928

Better support of signalling NaNs.
author Bruno Haible <bruno@clisp.org>
date Mon, 26 Mar 2007 22:26:05 +0000
parents 245a3653b197
children 810b08d769f8
line wrap: on
line diff
--- a/lib/tanl.c
+++ b/lib/tanl.c
@@ -55,6 +55,7 @@
 #include "trigl.c"
 #endif
 #endif
+#include "isnanl.h"
 
 /*
  * ====================================================
@@ -191,13 +192,17 @@
   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 */