Home | History | Annotate | Line # | Download | only in math
      1 /* GCC Quad-Precision Math Library
      2    Copyright (C) 2010, 2011 Free Software Foundation, Inc.
      3    Written by Francois-Xavier Coudert  <fxcoudert (at) gcc.gnu.org>
      4 
      5 This file is part of the libquadmath library.
      6 Libquadmath is free software; you can redistribute it and/or
      7 modify it under the terms of the GNU Library General Public
      8 License as published by the Free Software Foundation; either
      9 version 2 of the License, or (at your option) any later version.
     10 
     11 Libquadmath 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 Library General Public License for more details.
     15 
     16 You should have received a copy of the GNU Library General Public
     17 License along with libquadmath; see the file COPYING.LIB.  If
     18 not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
     19 Boston, MA 02110-1301, USA.  */
     20 
     21 #include "quadmath-imp.h"
     22 
     23 #ifdef HAVE_FENV_H
     24 # include <fenv.h>
     25 #endif
     26 
     27 
     28 #define REALPART(z) (__real__(z))
     29 #define IMAGPART(z) (__imag__(z))
     30 #define COMPLEX_ASSIGN(z_, r_, i_) {__real__(z_) = (r_); __imag__(z_) = (i_);}
     31 
     32 
     33 __float128
     34 cabsq (__complex128 z)
     35 {
     36   return hypotq (REALPART (z), IMAGPART (z));
     37 }
     38 
     39 
     40 __complex128
     41 cexpiq (__float128 x)
     42 {
     43   __float128 sinix, cosix;
     44   __complex128 v;
     45   sincosq (x, &sinix, &cosix);
     46   COMPLEX_ASSIGN (v, cosix, sinix);
     47   return v;
     48 }
     49 
     50 
     51 __float128
     52 cargq (__complex128 z)
     53 {
     54   return atan2q (IMAGPART (z), REALPART (z));
     55 }
     56 
     57 
     58 __complex128
     59 cpowq (__complex128 base, __complex128 power)
     60 {
     61   return cexpq (power * clogq (base));
     62 }
     63 
     64 
     65 __complex128
     66 ccosq (__complex128 x)
     67 {
     68   __complex128 y;
     69 
     70   COMPLEX_ASSIGN (y, -IMAGPART (x), REALPART (x));
     71   return ccoshq (y);
     72 }
     73