xref: /netbsd-src/external/gpl3/gcc.old/dist/libquadmath/math/cacosq.c (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
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
cacosq(__complex128 x)23 cacosq (__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