* ====================================================
*/
+#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"
#include "trigl.c"
#include "sincosl.c"
+#include "isnanl.h"
long double
sinl (long double x)
long double y[2], z = 0.0L;
int n;
+ /* sinl(NaN) is NaN */
+ if (isnanl (x))
+ return x;
+
/* |x| ~< pi/4 */
if (x >= -0.7853981633974483096156608458198757210492 &&
x <= 0.7853981633974483096156608458198757210492)
return kernel_sinl (x, z, 0);
- /* sinl(Inf or NaN) is NaN, sinl(0) is 0 */
- else if (x + x == x || x != x)
+ /* sinl(Inf) is NaN, sinl(0) is 0 */
+ else if (x + x == x)
return x - x; /* NaN */
/* argument reduction needed */
#if 0
int
-main ()
+main (void)
{
printf ("%.16Lg\n", sinl(0.7853981633974483096156608458198757210492));
printf ("%.16Lg\n", sinl(0.7853981633974483096156608458198757210492 *29));