catanhf, catanh, catanhl

< c‎ | numeric‎ | complex
 
 
 
复数算术
类型与虚数常量
(C99)
(C11)
(C99)
操作
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
幂与指数函数
(C99)
(C99)
(C99)
(C99)
三角函数
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
双曲函数
(C99)
(C99)
(C99)
(C99)
(C99)
catanh
(C99)
 
定义于头文件 <complex.h>
float complex       catanhf( float complex z );
(1) (C99 起)
double complex      catanh( double complex z );
(2) (C99 起)
long double complex catanhl( long double complex z );
(3) (C99 起)
定义于头文件 <tgmath.h>
#define atanh( z )
(4) (C99 起)
1-3) 计算 z 的复反双曲正切,其分支切割为沿实轴的 [−1; +1] 区间外部。
4) 泛型宏:若 z 拥有 long double complex 类型,则调用 catanhl 。若 z 拥有 double complex 类型,则调用 catanh ,若 z 拥有 float complex 类型,则调用 catanhf 。若 z 为实数或整数,则该宏调用对应的实函数( atanhfatanhatanhl )。若为虚数 z ,则该宏调用 atan 的对应实数版本,实现等式 atanh(iy) = i atan(y) ,而返回类型是虚数。

参数

z - 复参数

返回值

若不发生错误,则返回 z 的复反双曲正切,范围在数学上为沿着实轴无界的半条,沿着虚轴为区间 [−iπ/2; +iπ/2]

错误处理及特殊值

报告的错误与 math_errhandling 一致。

若实现支持 IEEE 浮点算术,则

  • catanh(conj(z)) == conj(catanh(z))
  • catanh(-z) == -catanh(z)
  • z+0+0i ,则结果为 +0+0i
  • z+0+NaNi ,则结果为 +0+NaNi
  • z+1+0i ,则结果为 +∞+0i 并引发 FE_DIVBYZERO
  • zx+∞i (对于任何有限正 x ) ,则结果为 +0+iπ/2
  • zx+NaNi (对于任何有限非零的 x ),则结果为 NaN+NaNi 并可能引发 FE_INVALID
  • z+∞+yi (对于任何有限的 y ),则结果为 +0+iπ/2
  • z+∞+∞i ,则结果为 +0+iπ/2
  • z+∞+NaNi, the result is +0+NaNi
  • zNaN+yi (对于任何有限的 y ),则结果为 NaN+NaNi 并可能引发 FE_INVALID
  • zNaN+∞i ,则结果为 ±0+iπ/2 (实部的符号未指定)
  • zNaN+NaNi ,则结果为 NaN+NaNi

注意

尽管 C 标准命名此函数为“复弧双曲正切”,双曲函数的反函数却是面积函数。其参数是双曲扇形的面积,而非弧长。正确的名称是“复反双曲正切”,和较少见的“复面积双曲正切”。

反双曲正切是多值函数,并要求复平面上的分支切割。我们约定将分支切割置于实轴的划分线 (-∞,-1][+1,+∞)

反双曲正切的主值的数学定义是 atanh z =
ln(1+z)-ln(z-1)
2


对于任何 z , atanh(z) =
atan(iz)
i

示例

#include <stdio.h>
#include <complex.h>
 
int main(void)
{
    double complex z = catanh(2);
    printf("catanh(+2+0i) = %f%+fi\n", creal(z), cimag(z));
 
    double complex z2 = catanh(conj(2)); // 或 C11 中的 catanh(CMPLX(2, -0.0))
    printf("catanh(+2-0i) (the other side of the cut) = %f%+fi\n", creal(z2), cimag(z2));
 
    // 对于任何 z , atanh(z) = atan(iz)/i
    double complex z3 = catanh(1+2*I);
    printf("catanh(1+2i) = %f%+fi\n", creal(z3), cimag(z3));
    double complex z4 = catan((1+2*I)*I)/I;
    printf("catan(i * (1+2i))/i = %f%+fi\n", creal(z4), cimag(z4));
}

输出:

catanh(+2+0i) = 0.549306+1.570796i
catanh(+2-0i) (the other side of the cut) = 0.549306-1.570796i
catanh(1+2i) = 0.173287+1.178097i
catan(i * (1+2i))/i = 0.173287+1.178097i

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 7.3.6.3 The catanh functions (p: 193)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • G.6.2.3 The catanh functions (p: 540-541)
  • G.7 Type-generic math <tgmath.h> (p: 545)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.3.6.3 The catanh functions (p: 175)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • G.6.2.3 The catanh functions (p: 475-476)
  • G.7 Type-generic math <tgmath.h> (p: 480)

参阅

(C99)(C99)(C99)
计算复数反双曲正弦
(函数)
(C99)(C99)(C99)
计算复数反双曲余弦
(函数)
(C99)(C99)(C99)
计算复数双曲正切
(函数)
(C99)(C99)(C99)
计算反双曲正切( artanh(x)
(函数)