# ctanf, ctan, ctanl

< c‎ | numeric‎ | complex

定义于头文件 `<complex.h>` |  |
float complex ctanf( float complex z ); | (1) | (C99 起)
double complex ctan( double complex z ); | (2) | (C99 起)
long double complex ctanl( long double complex z ); | (3) | (C99 起)
定义于头文件 `<tgmath.h>` |  |
#define tan( z ) | (4) | (C99 起)

1-3) 计算 `z` 的复正切。
4) 泛型宏：若 `z` 拥有 long double complex 类型，则调用 `ctanl` 。若 `z` 拥有 double complex 类型，则调用 `ctan` 。若 `z` 拥有 float complex 类型，则调用 `ctanf` 。若 `z` 为实数或整数，则该宏调用对应的实函数（ tanf 、 tan 、 tanl ）。若 `z` 为虚数，则该宏调用函数 tanh 的对应实版本，实现公式 tan(iy) = i tanh(y) ，而返回类型为虚数。

### 参数

z | - | 复参数

### 返回值

若无错误发生，则返回 `z` 的复正切。

错误和特殊情况如同运算实现为 -i * ctanh(i*z) 一般处理，其中 `i` 是虚数单位。

### 注意

正切是复平面上的解析函数，而无分支切割。它对于实部是周期的，周期为 πi ，而且沿实轴有一阶极点，位于坐标 (π(1/2 + n), 0) 。然而无常用浮点表示能准确表示 π/2 ，故而没有值使得极点错误出现。

正切的数学定义是 tan z =

i(e-iz -eiz )
e-iz +eiz

。

### 示例

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

    int main(void)
    {
        double complex z = ctan(1);  // 表现类似沿实轴的实正切
        printf("tan(1+0i) = %f%+fi ( tan(1)=%f)\n", creal(z), cimag(z), tan(1));

        double complex z2 = ctan(I); // 表现类似沿虚轴的 tanh
        printf("tan(0+1i) = %f%+fi (tanh(1)=%f)\n", creal(z2), cimag(z2), tanh(1));
    }

输出：

    tan(1+0i) = 1.557408+0.000000i ( tan(1)=1.557408)
    tan(0+1i) = 0.000000+0.761594i (tanh(1)=0.761594)

### 引用

- C11 标准（ISO/IEC 9899:2011）：

  - 7.3.5.6 The ctan functions (p: 192)

  - 7.25 Type-generic complex <tgmath.h> (p: 373-375)

  - G.7 Type-generic math <tgmath.h> (p: 545)

- C99 标准（ISO/IEC 9899:1999）：

  - 7.3.5.6 The ctan functions (p: 174)

  - 7.22 Type-generic complex <tgcomplex.h> (p: 335-337)

  - G.7 Type-generic math <tgmath.h> (p: 480)

### 参阅

ctanh ctanhf ctanhl (C99)(C99)(C99) | 计算复数双曲正切 (函数)
csin csinf csinl (C99)(C99)(C99) | 计算复数正弦 (函数)
ccos ccosf ccosl (C99)(C99)(C99) | 计算复数余弦 (函数)
catan catanf catanl (C99)(C99)(C99) | 计算复数反正切 (函数)
tan tanf tanl (C99)(C99) | 计算正切（ \({\small\tan{x} }\)tan(x) ） (函数)