Back to index

glibc  2.9
Functions
s_casinh.c File Reference
#include <complex.h>
#include <math.h>
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

__complex__ double __casinh (__complex__ double x)

Function Documentation

__complex__ double __casinh ( __complex__ double  x)

Definition at line 26 of file s_casinh.c.

{
  __complex__ double res;
  int rcls = fpclassify (__real__ x);
  int icls = fpclassify (__imag__ x);

  if (rcls <= FP_INFINITE || icls <= FP_INFINITE)
    {
      if (icls == FP_INFINITE)
       {
         __real__ res = __copysign (HUGE_VAL, __real__ x);

         if (rcls == FP_NAN)
           __imag__ res = __nan ("");
         else
           __imag__ res = __copysign (rcls >= FP_ZERO ? M_PI_2 : M_PI_4,
                                   __imag__ x);
       }
      else if (rcls <= FP_INFINITE)
       {
         __real__ res = __real__ x;
         if ((rcls == FP_INFINITE && icls >= FP_ZERO)
             || (rcls == FP_NAN && icls == FP_ZERO))
           __imag__ res = __copysign (0.0, __imag__ x);
         else
           __imag__ res = __nan ("");
       }
      else
       {
         __real__ res = __nan ("");
         __imag__ res = __nan ("");
       }
    }
  else if (rcls == FP_ZERO && icls == FP_ZERO)
    {
      res = x;
    }
  else
    {
      __complex__ double y;

      __real__ y = (__real__ x - __imag__ x) * (__real__ x + __imag__ x) + 1.0;
      __imag__ y = 2.0 * __real__ x * __imag__ x;

      y = __csqrt (y);

      __real__ y += __real__ x;
      __imag__ y += __imag__ x;

      res = __clog (y);
    }

  return res;
}

Here is the call graph for this function:

Here is the caller graph for this function: