C 库 - catanh() 函数

❮ C 标准库 - <complex.h>


C complex 库中的 catanh() 函数用于计算复数反双曲正切,即 z 的反双曲正切,其分支线位于实轴区间 [1,+1] 之外。它使得函数对于实轴上不在此区间内的任何复数 z 都连续且单值化。

反双曲正切 (atanh) z 定义为:
atanh(z) = 1/2ln(1+z/1-z)

此函数取决于 z 的类型。如果 z 是"float"类型,我们使用 catanhf() 计算反双曲正切;对于 long double 类型,使用 catanhl();对于 double 类型,使用 catanh()

语法

以下是 catanh() 函数的 C 库语法 -

double complex catanh( double complex z );

参数

此函数接受单个参数 -

  • Z - 它表示一个复数,我们要计算其反正切值 (atanh)。

返回值

此函数返回 z 的复数反双曲正切值,该值位于沿实轴无界的半带内,虚轴始终位于 [iπ/2, +iπ/2] 之间。

示例 1

以下是一个简单的 C 程序,用于演示如何对复数使用 catanh()

#include <stdio.h>
#include <complex.h>
#include <math.h>

int main() {
    // 定义 z
    double complex z = 0.5 + 0.5*I;
    
    // 计算 z 的复数反双曲正切
    double complex res= catanh(z);
    
    // 显示结果
    printf("catanh(%.2f + %.2fi) = %.2f + %.2fi", creal(z), cimag(z), creal(res), cimag(res));
    
    return 0;
}

输出

以下是输出 -

catanh(0.50 + 0.50i) = 0.40 + 0.55i

示例 2

我们来看另一个示例,使用 catanh() 函数计算实轴的反双曲正切。

#include <stdio.h>
#include <math.h>
#include <complex.h>
 
int main(void)
{
   // real axis
   double complex z = catanh(1);
   printf("tanh(1+0i) = %.2f+%.2fi ", creal(z), cimag(z));
}

输出

以下是输出 -

tanh(1+0i) = inf+0.00i

示例 3

以下程序计算复数虚线的反双曲正切 (atanh) 和双曲正切 (tanh),然后比较结果是否相同。

#include <complex.h>
#include <stdio.h>
#include <math.h>

int main() {
   double complex z = 0.0 + 1.0*I;

   double complex atanh = catanh(z);
   double complex tanh = ctanh(z);

   printf("catanh(%.1fi) = %.2f + %.2fi", cimag(z), creal(atanh), cimag(atanh));
   printf("ctanh(%.1fi) = %.2f + %.2fi", cimag(z), creal(tanh), cimag(tanh));

   if (cabs(atanh) == cabs(tanh)) {
      printf("The arc hyperbolic tangent and hyperbolic tangent of the imaginary line are approximately the same.");
   } else {
      printf("The arc hyperbolic tangent and hyperbolic tangent of the imaginary line are different.");
   }
   return 0;
}

输出

以下是输出 -

catanh(1.0i) = 0.00 + 1.56i
ctan(1.0i) = 0.00 + 0.76i
The hyperbolic tangent and tangent of the imaginary line are different.

❮ C 标准库 - <complex.h>