# std::atan, std::atanf, std::atanl

< cpp‎ | numeric‎ | math

定义于头文件 `<cmath>` |  |
| (1) |
float atan ( float arg ); |  |
float atanf( float arg ); |  | (C++11 起)
double atan ( double arg ); | (2) |
| (3) |
long double atan ( long double arg ); |  |
long double atanl( long double arg ); |  | (C++11 起)
double atan ( IntegralType arg ); | (4) | (C++11 起)

1-3) 计算 `arg` 的弧（反）正切主值。
4) 接受任何整数类型参数的重载集或函数模板，等价于 2) （将参数转型为 double ）。

### 参数

arg | - | 浮点或整数类型值

### 返回值

若不出现错误，则返回 `arg` 在 [-

π
2

; +

π
2

] 弧度范围中的弧（反）正切（ arctan(arg) ）。

若出现下溢所致的值域错误，则返回（舍入后的）正确结果。

### 错误处理

报告 math_errhandling 中指定的错误。

若实现支持 IEEE 浮点算术（ IEC 60559 ），则

- 若参数为 ±0 ，则返回不修改的参数
- 若参数为 +∞ ，则返回 +π/2
- 若参数为 -∞ ，则返回 -π/2
- 若参数为 NaN ，则返回 NaN

### 注意

POSIX 指定在下溢情况下，返回不修改的 `arg` ，而若不支持如此，则返回不大于 DBL_MIN 、 FLT_MIN 和 LDBL_MIN 的实现定义值。

### 示例

    #include <iostream>
    #include <cmath>

    int main()
    {
        std::cout << "atan(1) = " << atan(1) << " 4*atan(1) = " << 4*atan(1) << '\n';
        // 特殊值
        std::cout << "atan(Inf) = " << atan(INFINITY)
                  << " 2*atan(Inf) = " << 2*atan(INFINITY) << '\n'
                  << "atan(-0.0) = " << atan(-0.0) << '\n'
                  << "atan(+0.0) = " << atan(0) << '\n';
    }

输出：

    atan(1) = 0.785398 4*atan(1) = 3.14159
    atan(Inf) = 1.5708 2*atan(Inf) = 3.14159
    atan(-0.0) = -0
    atan(+0.0) = 0

### 参阅

asin asinf asinl (C++11)(C++11) | 计算反正弦（ \({\small\arcsin{x} }\)arcsin(x) ） (函数)
acos acosf acosl (C++11)(C++11) | 计算反余弦（ \({\small\arccos{x} }\)arccos(x) ） (函数)
atan2 atan2f atan2l (C++11)(C++11) | 反正切，用符号确定象限 (函数)
tan tanf tanl (C++11)(C++11) | 计算正切（ \({\small\tan{x} }\)tan(x) ） (函数)
atan(std::complex) (C++11) | 计算复数的反正切（ \({\small\arctan{z} }\)arctan(z) ） (函数模板)
atan(std::valarray) | 应用函数 std::atan 到 valarray 的每个元素 (函数模板)