std::atanh,std::atanh,std::atanhl (3) - Linux Manuals

std::atanh,std::atanh,std::atanhl: std::atanh,std::atanh,std::atanhl


std::atanh,std::atanh,std::atanhl - std::atanh,std::atanh,std::atanhl


Defined in header <cmath>
float atanh ( float arg ); (1) (since C++11)
float atanhf( float arg );
double atanh ( double arg ); (2) (since C++11)
long double atanh ( long double arg ); (3) (since C++11)
long double atanhl( long double arg );
double atanh ( IntegralType arg ); (4) (since C++11)

1-3) Computes the inverse hyperbolic tangent of arg.
4) A set of overloads or a function template accepting an argument of any integral_type. Equivalent to 2) (the argument is cast to double).


arg - value of a floating-point or Integral_type

Return value

If no errors occur, the inverse hyperbolic tangent of arg (tanh-1
(arg), or artanh(arg)), is returned.
If a domain error occurs, an implementation-defined value is returned (NaN where supported)
If a pole error occurs, ±HUGE_VAL, ±HUGE_VALF, or ±HUGE_VALL is returned (with the correct sign).
If a range error occurs due to underflow, the correct result (after rounding) is returned.

Error handling

Errors are reported as specified in math_errhandling.
If the argument is not on the interval [-1, +1], a range error occurs.
If the argument is ±1, a pole error occurs.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),

* if the argument is ±0, it is returned unmodified
* if the argument is ±1, ±∞ is returned and FE_DIVBYZERO is raised.
* if |arg|>1, NaN is returned and FE_INVALID is raised.
* if the argument is NaN, NaN is returned


Although the C standard (to which C++ refers for this function) names this function "arc hyperbolic tangent", the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is "inverse hyperbolic tangent" (used by POSIX) or "area hyperbolic tangent".
POSIX_specifies that in case of underflow, arg is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.


// Run this code

  #include <iostream>
  #include <cmath>
  #include <cfloat>
  #include <cerrno>
  #include <cfenv>
  #include <cstring>
  int main()
      std::cout << "atanh(0) = " << std::atanh(0) << '\n'
                << "atanh(-0) = " << std::atanh(-0.0) << '\n'
                << "atanh(0.9) = " << std::atanh(0.9) << '\n';
      // error handling
      errno = 0;
      std::cout << "atanh(-1) = " << std::atanh(-1) << '\n';
      if (errno == ERANGE)
          std::cout << " errno == ERANGE: " << std::strerror(errno) << '\n';
      if (std::fetestexcept(FE_DIVBYZERO))
          std::cout << " FE_DIVBYZERO raised\n";

Possible output:

  atanh(0) = 0
  atanh(-0) = -0
  atanh(0.9) = 1.47222
  atanh(-1) = -inf
      errno == ERANGE: Numerical result out of range
      FE_DIVBYZERO raised

External links

Weisstein,_Eric_W._"Inverse_Hyperbolic_Tangent." From MathWorld--A Wolfram Web Resource.

See also

asinhl computes the inverse hyperbolic sine (arsinh(x))

acoshl computes the inverse hyperbolic cosine (arcosh(x))

tanhl hyperbolic tangent


atanh(std::complex) computes area hyperbolic tangent of a complex number
                    (function template)