# acos, acosf, acosl

< c‎ | numeric‎ | math

定义于头文件 `<math.h>` |  |
float acosf( float arg ); | (1) | (C99 起)
double acos( double arg ); | (2) |
long double acosl( long double arg ); | (3) | (C99 起)
定义于头文件 `<tgmath.h>` |  |
#define acos( arg ) | (4) | (C99 起)

1-3) 计算 `arg` 的弧（反）余弦主值。
4) 泛型宏：若参数拥有 long double 类型，则调用 `acosl` 。否则，若参数拥有整数类型或 double 类型，则调用 `acos` 。否则调用 `acosf` 。若参数为复数，则宏调用对应的复数函数（ cacosf 、 cacos 、 cacosl ）。

### 参数

arg | - | 浮点值

### 返回值

若不出现错误，则返回 `arg` 于范围 [0 ; π] 中的弧（反）余弦（ arccos(arg) ）。

若出现定义域错误，则返回实现定义值（受支持平台上为 NaN ）。

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

### 错误处理

报告 math_errhandling 中指定的错误。

若 `arg` 在范围 `[-1.0; 1.0]` 外则出现定义域错误。

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

- 若参数为 +1 ，则返回值 `+0` 。
- 若 |arg| > 1 ，则返回定义域错误并返回 NaN 。
- 若参数为 NaN ，则返回 NaN 。

### 示例

    #include <stdio.h>
    #include <math.h>
    #include <errno.h>
    #include <fenv.h>
    #include <string.h>

    #pragma STDC FENV_ACCESS ON
    int main(void)
    {
        printf("acos(-1) = %f\n", acos(-1));
        printf("acos(0.0) = %f 2*acos(0.0) = %f\n", acos(0), 2*acos(0));
        printf("acos(0.5) = %f 3*acos(0.5) = %f\n", acos(0.5), 3*acos(0.5));
        printf("acos(1) = %f\n", acos(1));
        // 错误处理
        errno = 0; feclearexcept(FE_ALL_EXCEPT);
        printf("acos(1.1) = %f\n", acos(1.1));
        if(errno == EDOM) perror("    errno == EDOM");
        if(fetestexcept(FE_INVALID)) puts("    FE_INVALID raised");
    }

可能的输出：

    acos(-1) = 3.141593
    acos(0.0) = 1.570796 2*acos(0.0) = 3.141593
    acos(0.5) = 1.047198 3*acos(0.5) = 3.141593
    acos(1) = 0.000000
    acos(1.1) = nan
        errno == EDOM: Numerical argument out of domain
        FE_INVALID raised

### 引用

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

  - 7.12.4.1 The acos functions (p: 238)

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

  - F.10.1.1 The acos functions (p: 518)

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

  - 7.12.4.1 The acos functions (p: 218)

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

  - F.9.1.1 The acos functions (p: 455)

- C89/C90 标准（ISO/IEC 9899:1990）：

  - 4.5.2.1 The acos function

### 参阅

asin asinf asinl (C99)(C99) | 计算反正弦（ \({\small\arcsin{x} }\)arcsin(x) ） (函数)
atan atanf atanl (C99)(C99) | 计算反正切（ \({\small\arctan{x} }\)arctan(x) ） (函数)
atan2 atan2f atan2l (C99)(C99) | 计算反正切，以符号确定象限 (函数)
cos cosf cosl (C99)(C99) | 计算余弦（ \({\small\cos{x} }\)cos(x) ） (函数)
cacos cacosf cacosl (C99)(C99)(C99) | 计算复数反余弦 (函数)