std:: atan2, std:: atan2f, std:: atan2l
|
Definido en el encabezado
<cmath>
|
||
| (1) | ||
|
float
atan2
(
float
y,
float
x
)
;
double
atan2
(
double
y,
double
x
)
;
|
(hasta C++23) | |
|
/*floating-point-type*/
atan2
(
/*floating-point-type*/
y,
|
(desde C++23)
(constexpr desde C++26) |
|
|
float
atan2f
(
float
y,
float
x
)
;
|
(2) |
(desde C++11)
(constexpr desde C++26) |
|
long
double
atan2l
(
long
double
y,
long
double
x
)
;
|
(3) |
(desde C++11)
(constexpr desde C++26) |
|
Sobrecarga SIMD
(desde C++26)
|
||
|
Definido en el encabezado
<simd>
|
||
|
template
<
class
V0,
class
V1
>
constexpr
/*math-common-simd-t*/
<
V0, V1
>
|
(S) | (desde C++26) |
|
Sobrecargas adicionales
(desde C++11)
|
||
|
Definido en el encabezado
<cmath>
|
||
|
template
<
class
Integer
>
double atan2 ( Integer y, Integer x ) ; |
(A) | (constexpr desde C++26) |
std::atan2
para todos los tipos de punto flotante sin calificación cv como tipo de los parámetros.
(since C++23)
|
S)
La sobrecarga SIMD realiza un
std::atan2
elemento por elemento sobre
v_y
y
v_x
.
|
(desde C++26) |
|
A)
Se proporcionan sobrecargas adicionales para todos los tipos enteros, los cuales son tratados como
double
.
|
(since C++11) |
Contenidos |
Parámetros
| y, x | - | valores de punto flotante o enteros |
Valor de retorno
If no errors occur, the arc tangent of y / x ( arctan(| y |
| x |
Si ocurre un error de dominio, se devuelve un valor definido por la implementación (NaN donde esté soportado).
Si ocurre un error de rango debido a desbordamiento inferior, se devuelve el resultado correcto (después del redondeo).
Manejo de errores
Los errores se reportan como se especifica en math_errhandling .
Puede ocurrir un error de dominio si x y y son ambos cero.
Si la implementación soporta aritmética de punto flotante IEEE (IEC 60559),
- Si x e y son ambos cero, el error de dominio no ocurre.
- Si x e y son ambos cero, el error de rango tampoco ocurre.
- Si y es cero, el error de polo no ocurre.
- Si y es ±0 y x es negativo o -0, se devuelve ±π.
- Si y es ±0 y x es positivo o +0, se devuelve ±0.
- Si y es ±∞ y x es finito, se devuelve ±π/2.
- Si y es ±∞ y x es -∞, se devuelve ±3π/4.
- Si y es ±∞ y x es +∞, se devuelve ±π/4.
- Si x es ±0 y y es negativo, se devuelve -π/2.
- Si x es ±0 y y es positivo, se devuelve +π/2.
- Si x es -∞ y y es finito y positivo, se devuelve +π.
- Si x es -∞ y y es finito y negativo, se devuelve -π.
- Si x es +∞ y y es finito y positivo, se devuelve +0.
- Si x es +∞ y y es finito y negativo, se devuelve -0.
- Si x es NaN o y es NaN, se devuelve NaN.
Notas
std :: atan2 ( y, x ) es equivalente a std:: arg ( std:: complex < std:: common_type_t < decltype ( x ) , decltype ( y ) >> ( x, y ) ) .
POSIX especifica que en caso de underflow, se devuelve el valor y / x , y si eso no está soportado, se devuelve un valor definido por la implementación no mayor que DBL_MIN , FLT_MIN , y LDBL_MIN .
Las sobrecargas adicionales no requieren ser proporcionadas exactamente como (A) . Solo necesitan ser suficientes para garantizar que para su primer argumento num1 y segundo argumento num2 :
|
(hasta C++23) |
|
Si
num1
y
num2
tienen tipos aritméticos, entonces
std
::
atan2
(
num1, num2
)
tiene el mismo efecto que
std
::
atan2
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
Si no existe tal tipo de punto flotante con el mayor rango y subrango, entonces la resolución de sobrecarga no resulta en un candidato utilizable de las sobrecargas proporcionadas. |
(desde C++23) |
Ejemplo
#include <cmath> #include <iostream> void print_coordinates(int x, int y) { std::cout << std::showpos << "(x:" << x << ", y:" << y << ") cartesian is " << "(r:" << std::hypot(x, y) << ", phi:" << std::atan2(y, x) << ") polar\n"; } int main() { // uso normal: los signos de los dos argumentos determinan el cuadrante print_coordinates(+1, +1); // atan2( 1, 1) = +pi/4, Cuadrante I print_coordinates(-1, +1); // atan2( 1, -1) = +3pi/4, Cuadrante II print_coordinates(-1, -1); // atan2(-1, -1) = -3pi/4, Cuadrante III print_coordinates(+1, -1); // atan2(-1, 1) = -pi/4, Cuadrante IV // valores especiales std::cout << std::noshowpos << "atan2(0, 0) = " << atan2(0, 0) << '\n' << "atan2(0,-0) = " << atan2(0, -0.0) << '\n' << "atan2(7, 0) = " << atan2(7, 0) << '\n' << "atan2(7,-0) = " << atan2(7, -0.0) << '\n'; }
Salida:
(x:+1, y:+1) cartesian is (r:1.41421, phi:0.785398) polar (x:-1, y:+1) cartesian is (r:1.41421, phi:2.35619) polar (x:-1, y:-1) cartesian is (r:1.41421, phi:-2.35619) polar (x:+1, y:-1) cartesian is (r:1.41421, phi:-0.785398) polar atan2(0, 0) = 0 atan2(0,-0) = 3.14159 atan2(7, 0) = 1.5708 atan2(7,-0) = 1.5708
Véase también
|
(C++11)
(C++11)
|
calcula el arco seno (
arcsin(x)
)
(función) |
|
(C++11)
(C++11)
|
calcula el arco coseno (
arccos(x)
)
(función) |
|
(C++11)
(C++11)
|
calcula el arco tangente (
arctan(x)
)
(función) |
|
devuelve el ángulo de fase
(plantilla de función) |
|
|
aplica la función
std::atan2
a un valarray y un valor
(plantilla de función) |
|
|
Documentación C
para
atan2
|
|