kernel_tanl (long double x, long double y, int iy)
{
long double z, r, v, w, s, u, u1;
- int flag, sign;
+ int invert = 0, sign;
sign = 1;
if (x < 0)
}
if (x >= 0.6743316650390625) /* |x| >= 0.6743316650390625 */
{
- flag = 1;
+ invert = 1;
z = pio4hi - x;
w = pio4lo - y;
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)));
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 */