aboutsummaryrefslogtreecommitdiff
path: root/math/s_cacosl.c
diff options
context:
space:
mode:
Diffstat (limited to 'math/s_cacosl.c')
-rw-r--r--math/s_cacosl.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/math/s_cacosl.c b/math/s_cacosl.c
index 304076d..8eab1f0 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;
}