From cppreference.com
template<classT>complex<T>asinh(constcomplex<T>&z);(since C++11)Computes complex arc hyperbolic sine of a complex value z with branch cuts outside the interval [−i; +i] along the imaginary axis.
Parameters
z - complex value Return value
If no errors occur, the complex arc hyperbolic sine of z is returned, in the range of a strip mathematically unbounded along the real axis and in the interval [−iπ/2; +iπ/2] along the imaginary axis.
Error handling and special values
Errors are reported consistent with
.
If the implementation supports IEEE floating-point arithmetic,
std::asinh(std::conj(z))==std::conj(std::asinh(z))
std::asinh(-z)==-std::asinh(z)
If z is (+0,+0), the result is (+0,+0)
If z is (x,+∞) (for any positive finite x), the result is (+∞,π/2)
If z is (x,NaN) (for any finite x), the result is (NaN,NaN) and
may be raised
If z is (+∞,y) (for any positive finite y), the result is (+∞,+0)
If z is (+∞,+∞), the result is (+∞,π/4)
If z is (+∞,NaN), the result is (+∞,NaN)
If z is (NaN,+0), the result is (NaN,+0)
If z is (NaN,y) (for any finite nonzero y), the result is (NaN,NaN) and
may be raised
If z is (NaN,+∞), the result is (±∞,NaN) (the sign of the real part is unspecified)
If z is (NaN,NaN), the result is (NaN,NaN)
Notes
Although the C++ standard names this function "complex arc hyperbolic sine", 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 "complex inverse hyperbolic sine", and, less common, "complex area hyperbolic sine".
Inverse hyperbolic sine is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segments (-i∞,-i) and (i,i∞) of the imaginary axis.
The mathematical definition of the principal value of the inverse hyperbolic sine is asinh z = ln(z + √1+z2
).
For any z,
asinh(z) = asin(iz)i
.
Example
Run this code
#include<complex>#include<iostream>intmain(){std::cout<<std::fixed;std::complex<double>z1(0.0,-2.0);std::cout<<"asinh"<<z1<<" = "<<std::asinh(z1)<<'\n';std::complex<double>z2(-0.0,-2);std::cout<<"asinh"<<z2<<" (the other side of the cut) = "<<std::asinh(z2)<<'\n';// for any z, asinh(z) = asin(iz) / istd::complex<double>z3(1.0,2.0);std::complex<double>i(0.0,1.0);std::cout<<"asinh"<<z3<<" = "<<std::asinh(z3)<<'\n'<<"asin"<<z3*i<<" / i = "<<std::asin(z3*i)/i<<'\n';}Output:
asinh(0.000000,-2.000000) = (1.316958,-1.570796) asinh(-0.000000,-2.000000) (the other side of the cut) = (-1.316958,-1.570796) asinh(1.000000,2.000000) = (1.469352,1.063440) asin(-2.000000,1.000000) / i = (1.469352,1.063440) See also