std::atan2, std::atan2f, std::atan2l
| Definido en el archivo de encabezado <cmath>
|
||
| (1) | ||
float atan2 ( float y, float x ); |
||
float atan2f( float y, float x ); |
(desde C++11) | |
double atan2 ( double y, double x ); |
(2) | |
| (3) | ||
long double atan2 ( long double y, long double x ); |
||
long double atan2l( long double y, long double x ); |
(desde C++11) | |
Promovido atan2 ( Aritmético1 y, Aritmético2 x ); |
(4) | (desde C++11) |
y/x usando los signos de los argumentos para determinar el cuadrante correcto.double. Si cualquier argumento es long double, entonces el tipo de retorno Promovido también es long double, de lo contrario el tipo de retorno siempre es double.Parámetros
| y, x | - | Valores de tipos de punto flotante o tipos enteros. |
Valor de retorno
Si no se producen errores, se devuelve el arco tangente de y/x (
| y |
| x |
) en el rango [-π , +π] radianes.
Si se produce un error de dominio, se devuelve un valor definido por la implementación (NaN donde se dé apoyo).
Si se produce un error debido a subdesbordamiento, se devuelve el resultado correcto (después del redondeo).
Manejo de errores
Los errores se informan como se especifica en math_errhandling.
Se puede producir un error de dominio si x e y son cero.
Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):
- Si
xeyson cero, no se produce un error de dominio. - Si
xeyson cero, tampoco se produce un error de rango. - Si
yes cero, no se produce un error de polo. - Si
yes±0yxes negativo o-0, se devuelve±π. - Si
yes±0yxes positivo o+0, se devuelve±0. - Si
yes±∞yxes finito, se devuelve±π/2. - Si
yes±∞yxes-∞, se devuelve±3π/4. - Si
yes±∞yxes+∞, se devuelve±π/4. - Si
xes±0yyes negativo, se devuelve-π/2. - Si
xes±0yyes positive, se devuelve+π/2. - Si
xes-∞yyes finito y positivo, se devuelve+π. - Si
xes-∞yyes finito y negativo, se devuelve-π. - Si
xes+∞yyes finito y positivo, se devuelve+0. - Si
xes+∞yyes finito y negativo, se devuelve-0. - Si
xes NaN oyes NaN, se devuelve NaN.
Notas
std::atan2(y, x) es equivalente a std::arg(std::complex<double>(x,y)).
POSIX especifica que en caso de subdesbordamiento, se devuelva y/x, y si no se admite, se devuelva un valor definido por la implementación no mayor que DBL_MIN, FLT_MIN y LDBL_MIN.
Ejemplo
#include <iostream>
#include <cmath>
int main()
{
// uso normal: los signos de los dos argumentos determinan el cuadrante
std::cout << "(x:+1,y:+1) cartesiano es (r:" << hypot(1,1)
<< ",phi:" << atan2(1,1) << ") polar\n" // atan2(1,1) = +pi/4, Cuad I
<< "(x:-1,y:+1) cartesiano es (r:" << hypot(1,-1)
<< ",phi:" << atan2(1,-1) << ") polar\n" // atan2(1, -1) = +3pi/4, Cuad II
<< "(x:-1,y:-1) cartesiano es (r:" << hypot(-1,-1)
<< ",phi:" << atan2(-1,-1) << ") polar\n" // atan2(-1,-1) = -3pi/4, Cuad III
<< "(x:+1,y:-1) cartesiano es (r:" << hypot(-1,1)
<< ",phi:" << atan2(-1,1) << ") polar\n"; // atan2(-1, 1) = -pi/4, Cuad IV
// valores especiales
std::cout << "atan2(0, 0) = " << atan2(0,0)
<< " atan2(0,-0) = " << atan2(0,-0.0) << '\n'
<< "atan2(7, 0) = " << atan2(7,0)
<< " atan2(7,-0) = " << atan2(7,-0.0) << '\n';
}
Salida:
(x:+1,y:+1) cartesiano es (r:1.41421,phi:0.785398) polar
(x:-1,y:+1) cartesiano es (r:1.41421,phi:2.35619) polar
(x:-1,y:-1) cartesiano es (r:1.41421,phi:-2.35619) polar
(x:+1,y:-1) cartesiano es (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 (arcsen(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) | |
se aplica la función std::atan2 a un valarray y un valor Original: applies the function std::atan2 to a valarray and a value The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de función) | |
Documentación de C para atan2
| |