1/* Return cosine of a complex type.
2   Copyright (C) 1997-2018 Free Software Foundation, Inc.
3   This file is part of the GNU C Library.
4   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
5
6   The GNU C Library is free software; you can redistribute it and/or
7   modify it under the terms of the GNU Lesser General Public
8   License as published by the Free Software Foundation; either
9   version 2.1 of the License, or (at your option) any later version.
10
11   The GNU C Library is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   Lesser General Public License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with the GNU C Library; if not, see
18   <http://www.gnu.org/licenses/>.  */
19
20#include "quadmath-imp.h"
21
22__complex128
23cacosq (__complex128 x)
24{
25  __complex128 y;
26  __complex128 res;
27  int rcls = fpclassifyq (__real__ x);
28  int icls = fpclassifyq (__imag__ x);
29
30  if (rcls <= QUADFP_INFINITE || icls <= QUADFP_INFINITE
31      || (rcls == QUADFP_ZERO && icls == QUADFP_ZERO))
32    {
33      y = casinq (x);
34
35      __real__ res = (__float128) M_PI_2q - __real__ y;
36      if (__real__ res == 0)
37	__real__ res = 0;
38      __imag__ res = -__imag__ y;
39    }
40  else
41    {
42      __real__ y = -__imag__ x;
43      __imag__ y = __real__ x;
44
45      y = __quadmath_kernel_casinhq (y, 1);
46
47      __real__ res = __imag__ y;
48      __imag__ res = __real__ y;
49    }
50
51  return res;
52}
53