计算x
(atan
、atanf
和 atanl
)的反正切值或 y
/x
(atan2
、atan2f
和 atan2l
)的反正切值。
语法
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
参数
%>
任意数字。
返回值
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>
中的 atan
或 atan2
宏,自变量的类型将确定选择哪个版本的函数。 有关详细信息,请参阅泛型类型数学。
atan
具有使用流式处理 SIMD 扩展 2 (SSE2) 的实现。 有关使用 SSE2 实现的信息和限制,请参阅 _set_SSE2_enable
。
C++ 允许重载,因此你可以调用采用 float
或 long double
参数的 atan
和 atan2
重载。 在 C 程序中,除非使用 <tgmath.h>
宏来调用此函数,否则 atan
和 atan2
始终采用 double
参数并返回 double
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 (C) | 必需的标头 (C++) |
---|---|---|
<math.h> |
<cmath> 或 <math.h> |
|
atan 、atan2 宏 |
<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