diff options
Diffstat (limited to 'libquadmath/math/casinhq.c')
-rw-r--r-- | libquadmath/math/casinhq.c | 34 |
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; |