# catanf, catan, catanl

< c‎ | numeric‎ | complex

定义于头文件 `<complex.h>` |  |
float complex catanf( float complex z ); | (1) | (C99 起)
double complex catan( double complex z ); | (2) | (C99 起)
long double complex catanl( long double complex z ); | (3) | (C99 起)
定义于头文件 `<tgmath.h>` |  |
#define atan( z ) | (4) | (C99 起)

1-3) 计算 `z` 的复弧（反）正切，分支切割在沿虚轴的 [−i,+i] 区间外。
4) 泛型宏：若 `z` 拥有 long double complex 类型，则调用 `catanl` 。若 `z` 拥有 double complex 类型，则调用 `catan` 。若 `z` 拥有 float complex 类型，则调用 `catanf` 。若 `z` 为实数或整数，则宏调用对应的实数函数（ atanf 、 atan 、 atanl ）。若 `z` 为虚数，则宏调用函数 atanh 的对应实数版本，实现公式 atan(iy) = i atanh(y) ，而宏的返回类型为虚数。

### 参数

z | - | 复参数

### 返回值

若不发生错误，则返回 `z` 的复弧（反）正切，在沿虚轴无界，沿实轴在区间 [−π/2; +π/2] 内的条状范围中。

按照如同以 -I * catanh(I*z) 实现运算一般处理错误和特殊情况。

### 注意

反正切（或弧正切）是多值函数而要求复平面上的分支切割。约定分支切割置于虚轴的线段 (-∞i,-i) 和 (+i,+∞i) 上。

反正切主值的数学定义是 atan z = -

1
2

i [ln(1 - iz) - ln (1 + iz] 。

### 示例

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

    int main(void)
    {
        double complex z = catan(2*I);
        printf("catan(+0+2i) = %f%+fi\n", creal(z), cimag(z));

        double complex z2 = catan(-conj(2*I)); // 或 CMPLX(-0.0, 2)
        printf("catan(-0+2i) (the other side of the cut) = %f%+fi\n", creal(z2), cimag(z2));

        double complex z3 = 2*catan(2*I*DBL_MAX); // 或 CMPLX(0, INFINITY)
        printf("2*catan(+0+i*Inf) = %f%+fi\n", creal(z3), cimag(z3));
    }

输出：

    catan(+0+2i) = 1.570796+0.549306i
    catan(-0+2i) (the other side of the cut) = -1.570796+0.549306i
    2*catan(+0+i*Inf) = 3.141593+0.000000i

### 引用

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

  - 7.3.5.3 The catan functions (p: 191)

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

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

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

  - 7.3.5.3 The catan functions (p: 173)

  - 7.22 Type-generic math <tgmath.h> (p: 335-337)

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

### 参阅

casin casinf casinl (C99)(C99)(C99) | 计算复数反正弦 (函数)
cacos cacosf cacosl (C99)(C99)(C99) | 计算复数反余弦 (函数)
ctan ctanf ctanl (C99)(C99)(C99) | 计算复数正切 (函数)
atan atanf atanl (C99)(C99) | 计算反正切（ \({\small\arctan{x} }\)arctan(x) ） (函数)