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) |
y / x с использованием знаков аргументов для определения правильного квадранта.long double, вызывается (3) (atan2l). В противном случае, если какой-либо аргумент имеет целочисленный тип или тип double, вызывается (2) (atan2). В противном случае вызывается (1) (atan2f).| Функции (4-6) объявляются только в том случае, если реализация предварительно определяет | (с C23) |
Параметры
| x, y | - | число с плавающей точкой |
Возвращаемое значение
Если ошибки не возникли, возвращается арктангенсy / x (arctan(y/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
См. также
|
(C99)(C99) | вычисляет арксинус (\({\small\arcsin{x} }\)arcsin(x)) (функция) |
|
(C99)(C99) | вычисляет арккосинус (\({\small\arccos{x} }\)arccos(x)) (функция) |
|
(C99)(C99) | вычисляет арктангенс (\({\small\arctan{x} }\)arctan(x)) (функция) |
|
(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