summaryrefslogtreecommitdiff
path: root/libquadmath/math/casinhq.c
diff options
context:
space:
mode:
Diffstat (limited to 'libquadmath/math/casinhq.c')
-rw-r--r--libquadmath/math/casinhq.c34
1 files changed, 9 insertions, 25 deletions
diff --git a/libquadmath/math/casinhq.c b/libquadmath/math/casinhq.c
index 11487b967fc..878a6c2b317 100644
--- a/libquadmath/math/casinhq.c
+++ b/libquadmath/math/casinhq.c
@@ -1,5 +1,5 @@
-/* Return arc hyperbole sine for __float128 value.
- Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Return arc hyperbolic sine for a complex float type.
+ Copyright (C) 1997-2018 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -14,13 +14,11 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
#include "quadmath-imp.h"
-
__complex128
casinhq (__complex128 x)
{
@@ -37,15 +35,16 @@ casinhq (__complex128 x)
if (rcls == QUADFP_NAN)
__imag__ res = nanq ("");
else
- __imag__ res = copysignq (rcls >= QUADFP_ZERO ? M_PI_2q : M_PI_4q,
- __imag__ x);
+ __imag__ res = copysignq ((rcls >= QUADFP_ZERO
+ ? M_PI_2q : M_PI_4q),
+ __imag__ x);
}
else if (rcls <= QUADFP_INFINITE)
{
__real__ res = __real__ x;
if ((rcls == QUADFP_INFINITE && icls >= QUADFP_ZERO)
|| (rcls == QUADFP_NAN && icls == QUADFP_ZERO))
- __imag__ res = copysignq (0.0, __imag__ x);
+ __imag__ res = copysignq (0, __imag__ x);
else
__imag__ res = nanq ("");
}
@@ -61,22 +60,7 @@ casinhq (__complex128 x)
}
else
{
- __complex128 y;
-
- __real__ y = (__real__ x - __imag__ x) * (__real__ x + __imag__ x) + 1.0;
- __imag__ y = 2.0 * __real__ x * __imag__ x;
-
- y = csqrtq (y);
-
- __real__ y += __real__ x;
- __imag__ y += __imag__ x;
-
- res = clogq (y);
-
- /* Ensure zeros have correct sign and results are correct if
- very close to branch cuts. */
- __real__ res = copysignq (__real__ res, __real__ x);
- __imag__ res = copysignq (__imag__ res, __imag__ x);
+ res = __quadmath_kernel_casinhq (x, 0);
}
return res;