计算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 later
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 later
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