Add isnanf module.
[pspp] / lib / cosl.c
index f019eee61b2868689a1f06503bd0d50467fd2f55..8a9cb56c0157102200e8c5cb48a4b8ee6bda1e05 100644 (file)
  * ====================================================
  */
 
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
 /* sinl(x)
  * Return sine function of x.
  *
  *     TRIG(x) returns trig(x) nearly rounded
  */
 
-#include <math.h>
-
-#include "mathl.h"
-
 #include "trigl.h"
 #ifdef HAVE_SINL
 #include "trigl.c"
 #include "sincosl.c"
 #endif
+#include "isnanl.h"
 
 long double cosl(long double x)
 {
        long double y[2],z=0.0L;
        int n;
 
+    /* cosl(NaN) is NaN */
+        if (isnanl (x))
+          return x;
+
     /* |x| ~< pi/4 */
         if(x >= -0.7853981633974483096156608458198757210492 &&
            x <= 0.7853981633974483096156608458198757210492)
           return kernel_cosl(x, z);
 
-    /* sinl(Inf or NaN) is NaN, sinl(0) is 0 */
-        else if ((x + x == x && x != 0.0) || x != x)
+    /* cosl(Inf) is NaN, cosl(0) is 1 */
+        else if (x + x == x && x != 0.0)
           return x-x;           /* NaN */
 
     /* argument reduction needed */
@@ -83,7 +89,7 @@ long double cosl(long double x)
 
 #if 0
 int
-main ()
+main (void)
 {
   printf ("%.16Lg\n", cosl(0.7853981633974483096156608458198757210492));
   printf ("%.16Lg\n", cosl(0.7853981633974483096156608458198757210492 *29));