atan, atanf, atanl, atan2, atan2f, atan2l

计算xatanatanfatanl)的反正切值或 y/xatan2atan2fatan2l)的反正切值。

语法

double atan( double x );
float atanf( float x );
long double atanl( long double x );
#define atan(X) // Requires C11 or higher

float atan( float x );  // C++ only
long double atan( long double x );  // C++ only

double atan2( double y, double x );
float atan2f( float y, float x );
long double atan2l( long double y, long double x );
#define atan2(Y, X) // Requires C11 or higher

float atan2( float y, float x );  // C++ only
long double atan2( long double y, long double x );  // C++ only

参数

xy
任意数字。

返回值

atan 返回 -π/2 到 π/2 弧度范围内的 x 的反正切值。 atan2 返回 -π 到 π 弧度范围内的 y/x 的反正切值。 如果 x 为 0,则 atan 返回 0。 如果 atan2 的这两个参数均为 0,则函数返回 0。 所有结果都都以弧度为单位。

atan2 使用这两个参数符号来确定返回值的象限。

输入 SEH 异常 _matherr 异常
± QNaN、IND _DOMAIN

备注

atan 函数计算 x 的反正切值(反正切函数)。 atan2 计算 y/x 的反正切值(假设 x 等于 0,如果 y 为正,则 atan2 返回 π/2;如果 y 为负,则返回 -π/2;如果 y 为 0,则返回 0)。

如果使用 <tgmath.h> 中的 atanatan2 宏,自变量的类型将确定选择哪个版本的函数。 有关详细信息,请参阅泛型类型数学

atan 具有使用流式处理 SIMD 扩展 2 (SSE2) 的实现。 有关使用 SSE2 实现的信息和限制,请参阅 _set_SSE2_enable

C++ 允许重载,因此你可以调用采用 floatlong double 参数的 atanatan2 重载。 在 C 程序中,除非使用 <tgmath.h> 宏来调用此函数,否则 atanatan2 始终采用 double 参数并返回 double

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

例程 必需的标头 (C) 必需的标头 (C++)
atan, atan2, atanf, atan2f, atanl, atan2l <math.h> <cmath><math.h>
atanatan2 <tgmath.h>

示例

// crt_atan.c
// arguments: 5 0.5
#include <math.h>
#include <stdio.h>
#include <errno.h>

int main( int ac, char* av[] )
{
   double x, y, theta;
   if( ac != 3 ){
      fprintf( stderr, "Usage: %s <x> <y>\n", av[0] );
      return 1;
   }
   x = atof( av[1] );
   theta = atan( x );
   printf( "Arctangent of %f: %f\n", x, theta );
   y = atof( av[2] );
   theta = atan2( y, x );
   printf( "Arctangent of %f / %f: %f\n", y, x, theta );
   return 0;
}
Arctangent of 5.000000: 1.373401
Arctangent of 0.500000 / 5.000000: 0.099669

另请参阅

数学和浮点支持
acosacosfacosl
asinasinfasinl
coscosfcosl
_matherr
sinsinfsinl
tantanftanl
_CIatan
_CIatan2