函数
<cmath> <ctgmath>

atan2

double atan2(double y, double x);
     double atan2  (double y     , double x);      float atan2f (float y      , float x);long double atan2l (long double y, long double x);
     double atan2 (double y     , double x);      float atan2 (float y      , float x);long double atan2 (long double y, long double x);
     double atan2 (double y     , double x);      float atan2 (float y      , float x);long double atan2 (long double y, long double x);     double atan2 (Type1 y      , Type2 x);       // additional overloads
计算带两个参数的反正切
返回 y/x 的反正切的主值,以弧度表示。

为了计算该值,函数会考虑两个参数的符号,以确定象限。

在C++中,此函数在 <valarray> 中重载(请参阅 valarray atan2)。

头文件 <tgmath.h> 提供了此函数的类型通用宏版本。
此函数在 <valarray> 中重载(请参阅 valarray atan2)。
此标头(<cmath>)中为其他 算术类型Type1Type2)的组合提供了额外的重载:这些重载实际上会在计算前将参数转换为 double,除非至少有一个参数的类型为 long double(在这种情况下,两者都会被转换为 long double)。

此函数也在 <valarray> 中重载(请参阅 valarray atan2)。

参数

y
表示 y 坐标比例的值。
x
表示 x 坐标比例的值。
如果传入的两个参数都为零,则会发生定义域错误

返回值

y/x 的主反正切,在 [-pi,+pi] 弧度区间内。
弧度等于 180/PI

如果发生定义域错误,全局变量 errno 会被设置为 EDOM
如果发生定义域错误
- 并且 math_errhandling 设置了 MATH_ERRNO:全局变量 errno 会被设置为 EDOM
- 并且 math_errhandling 设置了 MATH_ERREXCEPT:将引发 FE_INVALID

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* atan2 example */
#include <stdio.h>      /* printf */
#include <math.h>       /* atan2 */

#define PI 3.14159265

int main ()
{
  double x, y, result;
  x = -10.0;
  y = 10.0;
  result = atan2 (y,x) * 180 / PI;
  printf ("The arc tangent for (x=%f, y=%f) is %f degrees\n", x, y, result );
  return 0;
}

输出

The arc tangent for (x=-10.000000, y=10.000000) is 135.000000 degrees.


另见