diff options
Diffstat (limited to 'math/s_cacosl.c')
-rw-r--r-- | math/s_cacosl.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/math/s_cacosl.c b/math/s_cacosl.c index 304076ddfe..8eab1f0004 100644 --- a/math/s_cacosl.c +++ b/math/s_cacosl.c @@ -25,11 +25,27 @@ __cacosl (__complex__ long double x) { __complex__ long double y; __complex__ long double res; - - y = __casinl (x); - - __real__ res = M_PI_2l - __real__ y; - __imag__ res = -__imag__ y; + int rcls = fpclassify (__real__ x); + int icls = fpclassify (__imag__ x); + + if (rcls <= FP_INFINITE || icls <= FP_INFINITE + || (rcls == FP_ZERO && icls == FP_ZERO)) + { + y = __casinl (x); + + __real__ res = M_PI_2l - __real__ y; + __imag__ res = -__imag__ y; + } + else + { + __real__ y = -__imag__ x; + __imag__ y = __real__ x; + + y = __kernel_casinhl (y, 1); + + __real__ res = __imag__ y; + __imag__ res = __real__ y; + } return res; } |