C++ 参考手册

位置:首页 > C++ 参考手册 >数值库 >常用数学函数 > std::acos, std::acosf, std::acosl

定义于头文件 <cmath>
(1)
float       acos ( float arg );
float       acosf( float arg );
(C++11 起)
double      acos ( double arg );
(2)
(3)
long double acos ( long double arg );
long double acosl( long double arg );
(C++11 起)
double      acos ( IntegralType arg );
(4) (C++11 起)
1-3) 计算 arg 的弧(反)余弦主值。
4) 接受任何整数类型参数的重载集或函数模板。等价于 2) (将参数转型为 double )。

参数

arg - 浮点或整数类型

返回值

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

若出现定义域错误,则返回实现定义值(受支持平台上为 NaN )。

若出现下溢所致的值域错误,则返回(舍入后的)正确结果。

错误处理

报告 math_errhandling 中指定的错误。

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

若实现支持 IEEE 浮点算术( IEC 60559 ),则

  • 若参数为 +1 ,则返回值 +0
  • |arg| > 1 ,则返回定义域错误并返回 NaN 。
  • 若参数为 NaN ,则返回 NaN 。rror occurs and NaN is returned.
  • if the argument is NaN, NaN is returned

示例

#include <cmath>
#include <iostream>
#include <cerrno>
#include <cfenv>
#include <cstring>
 
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout << "acos(-1) = " << acos(-1) << '\n'
              << "acos(0.0) = " << acos(0.0) << " 2*acos(0.0) = " << 2*acos(0) << '\n'
              << "acos(0.5) = " << acos(0.5) << " 3*acos(0.5) = " << 3*acos(0.5) << '\n'
              << "acos(1) = " << acos(1) << '\n';
    // 错误处理
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "acos(1.1) = " << acos(1.1) << '\n';
    if (errno == EDOM)
        std::cout << "    errno == EDOM: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID raised" << '\n';
}

输出:

acos(-1) = 3.14159
acos(0.0) = 1.5708 2*acos(0.0) = 3.14159
acos(0.5) = 1.0472 3*acos(0.5) = 3.14159
acos(1) = 0
acos(1.1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised

参阅

(C++11)(C++11)
计算反正弦( arcsin(x)
(函数)
(C++11)(C++11)
计算反正切( arctan(x)
(函数)
(C++11)(C++11)
反正切,用符号确定象限
(函数)
(C++11)(C++11)
计算余弦( cos(x)
(函数)
计算复数的反余弦( arccos(z)
(函数模板)
应用函数 std::acos 到 valarray 的每个元素
(函数模板)