C++ 参考手册

位置:首页 > C++ 参考手册 >数值库 >常用数学函数 > std::tan, std::tanf, std::tanl

定义于头文件 <cmath>
(1)
float       tan ( float arg );
float       tanf( float arg );
(C++11 起)
double      tan ( double arg );
(2)
(3)
long double tan ( long double arg );
long double tanl( long double arg );
(C++11 起)
double      tan ( IntegralType arg );
(4) (C++11 起)
1-3) 计算 arg (以弧度度量)的正切。
4) 接受任何整数类型参数的重载集或函数模板。等价于 2) (将参数转型为 double )。

参数

arg - 浮点或整数类型的,以弧度表示角的值

返回值

若不出现错误,则返回 arg 的正切( tan(arg) )。

arg 的绝对值很大,则结果可能有较少或无有效数字。

(C++11 前)

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

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

错误处理

报告 math_errhandling 中指定的错误。

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

  • 若参数为 ±0 ,则返回不修改的参数
  • 若参数为 ±∞ ,则返回 NaN 并引发 FE_INVALID
  • 若参数为 NaN ,则返回 NaN

注意

(C++ 委派到的) C 中参数为无限大的情况未被指定为定义域错误,但它被定义为 POSIX 中的定义域错误

函数在 π(1/2 + n) 有数学上的极点;然而无常用浮点表示能准确表示 π/2 ,故而没有值使得极点错误出现。

示例

#include <iostream>
#include <cmath>
#include <cerrno>
#include <cfenv>
 
#pragma STDC FENV_ACCESS ON
const double pi = std::acos(-1);
int main()
{
    // 典型用法
    std::cout << "tan  (pi/4) = " << std::tan(  pi/4) << '\n' // 45°
              << "tan(3*pi/4) = " << std::tan(3*pi/4) << '\n' // 135°
              << "tan(5*pi/4) = " << std::tan(5*pi/4) << '\n' // -135°
              << "tan(7*pi/4) = " << std::tan(7*pi/4) << '\n'; // -45°
    // 特殊值
    std::cout << "tan(+0) = " << std::tan(0.0) << '\n'
              << "tan(-0) = " << std::tan(-0.0) << '\n';
    // 错误处理
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "tan(INFINITY) = " << std::tan(INFINITY) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID raised\n";
}

可能的输出:

tan  (pi/4) = 1
tan(3*pi/4) = -1
tan(5*pi/4) = 1
tan(7*pi/4) = -1
tan(+0) = 0
tan(-0) = -0
tan(INFINITY) = -nan
    FE_INVALID raised

参阅

(C++11)(C++11)
计算正弦( sin(x)
(函数)
(C++11)(C++11)
计算余弦( cos(x)
(函数)
(C++11)(C++11)
计算反正切( arctan(x)
(函数)
计算复数的正切( tan(z)
(函数模板)
应用函数 std::tan 到 valarray 的每个元素
(函数模板)