Spec-Zone.ru › C

atan2, atan2f, atan2l

Определено в заголовочном файле <math.h>
float       atan2f( float y, float x );
(1) (с C99)
double      atan2( double y, double x );
(2)
long double atan2l( long double y, long double x );
(3) (с C99)
_Decimal32  atan2d32( _Decimal32 y, _Decimal32 x );
(4) (с C23)
_Decimal64  atan2d64( _Decimal64 y, _Decimal64 x );
(5) (с C23)
_Decimal128 atan2d128( _Decimal128 y, _Decimal128 x );
(6) (с C23)
Определено в заголовочном файле <tgmath.h>
#define atan2( y, x )
(7) (с C99)
1-6) Вычисляет арктангенс y / x с использованием знаков аргументов для определения правильного квадранта.
7) Универсальное макрос: Если какой-либо аргумент имеет тип long double, вызывается (3) (atan2l). В противном случае, если какой-либо аргумент имеет целочисленный тип или тип double, вызывается (2) (atan2). В противном случае вызывается (1) (atan2f).

Функции (4-6) объявляются только в том случае, если реализация предварительно определяет __STDC_IEC_60559_DFP__ (то есть реализация поддерживает десятичные числа с плавающей точкой).

(с C23)

Параметры

x, y - число с плавающей точкой

Возвращаемое значение

Если ошибки не возникли, возвращается арктангенс y / x (arctan(y/x)) в диапазоне [-π ; +π] радиан.
Аргумент Y
Возвращаемое значение
math-atan2.png
Аргумент X

Если произошла ошибка области определения, возвращается значение, определяемое реализацией.

Если произошла ошибка диапазона из-за подтекания, возвращается правильный результат (после округления).

Обработка ошибок

Ошибки сообщаются, как указано в math_errhandling.

Ошибка области определения может возникнуть, если x и y одновременно равны нулю.

Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559):

  • Если x и y оба равны нулю, ошибка области определения не возникает;
  • Если x и y оба равны нулю, ошибка диапазона также не возникает;
  • Если y равно нулю, ошибка полюса не возникает;
  • Если y равно ±0 и x отрицательно или -0, возвращается ±π;
  • Если y равно ±0 и x положительно или +0, возвращается ±0;
  • Если y равно ±∞ и x конечно, возвращается ±π/2;
  • Если y равно ±∞ и x равно -∞, возвращается ±3π/4;
  • Если y равно ±∞ и x равно +∞, возвращается ±π/4;
  • Если x равно ±0 и y отрицательно, возвращается -π/2;
  • Если x равно ±0 и y положительно, возвращается +π/2;
  • Если x равно -∞ и y конечно и положительно, возвращается +π;
  • Если x равно -∞ и y конечно и отрицательно, возвращается -π;
  • Если x равно +∞ и y конечно и положительно, возвращается +0;
  • Если x равно +∞ и y конечно и отрицательно, возвращается -0;
  • Если любой из x или y равен NaN, возвращается NaN.

Примечания

atan2(y, x) эквивалентно carg(x + I*y).

POSIX определяет, что в случае подтекания возвращается значение y / x, а если это не поддерживается, возвращается значение, определяемое реализацией, не большее чем DBL_MIN, FLT_MIN, и LDBL_MIN.

Пример

#include <math.h>
#include <stdio.h>
 
int main(void)
{
    // normal usage: the signs of the two arguments determine the quadrant
    // atan2(1,1) = +pi/4, Quad I
    printf("(+1,+1) cartesian is (%f,%f) polar\n", hypot( 1, 1), atan2( 1, 1));
    // atan2(1, -1) = +3pi/4, Quad II
    printf("(+1,-1) cartesian is (%f,%f) polar\n", hypot( 1,-1), atan2( 1,-1));
    // atan2(-1,-1) = -3pi/4, Quad III
    printf("(-1,-1) cartesian is (%f,%f) polar\n", hypot(-1,-1), atan2(-1,-1));
    // atan2(-1,-1) = -pi/4, Quad IV
    printf("(-1,+1) cartesian is (%f,%f) polar\n", hypot(-1, 1), atan2(-1, 1));
 
    // special values
    printf("atan2(0, 0) = %f atan2(0, -0)=%f\n", atan2(0,0), atan2(0,-0.0));
    printf("atan2(7, 0) = %f atan2(7, -0)=%f\n", atan2(7,0), atan2(7,-0.0));
}

Вывод:

(+1,+1) cartesian is (1.414214,0.785398) polar
(+1,-1) cartesian is (1.414214,2.356194) polar
(-1,-1) cartesian is (1.414214,-2.356194) polar
(-1,+1) cartesian is (1.414214,-0.785398) polar
atan2(0, 0) = 0.000000 atan2(0, -0)=3.141593
atan2(7, 0) = 1.570796 atan2(7, -0)=1.570796

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2023):
    • 7.12.4.4 Функции atan2 (стр.: TBD)
    • 7.25 Универсальная математика <tgmath.h> (стр.: TBD)
    • F.10.1.4 Функции atan2 (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.12.4.4 Функции atan2 (стр.: 174)
    • 7.25 Универсальная математика <tgmath.h> (стр.: 272-273)
    • F.10.1.4 Функции atan2 (стр.: 378)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.12.4.4 Функции atan2 (стр.: 239)
    • 7.25 Универсальная математика <tgmath.h> (стр.: 373-375)
    • F.10.1.4 Функции atan2 (стр.: 519)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.12.4.4 Функции atan2 (стр.: 219)
    • 7.22 Универсальная математика <tgmath.h> (стр.: 335-337)
    • F.9.1.4 Функции atan2 (стр.: 456)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
    • 4.5.2.4 Функция atan2

См. также

asinasinfasinl
(C99)(C99)
вычисляет арксинус (\({\small\arcsin{x} }\)arcsin(x))
(функция)
acosacosfacosl
(C99)(C99)
вычисляет арккосинус (\({\small\arccos{x} }\)arccos(x))
(функция)
atanatanfatanl
(C99)(C99)
вычисляет арктангенс (\({\small\arctan{x} }\)arctan(x))
(функция)
cargcargfcargl
(C99)(C99)(C99)
вычисляет фазовый угол комплексного числа
(функция)
Документация C++ для atan2

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/math/atan2

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API