std:: atan2, std:: atan2f, std:: atan2l
|
Défini dans l'en-tête
<cmath>
|
||
| (1) | ||
|
float
atan2
(
float
y,
float
x
)
;
double
atan2
(
double
y,
double
x
)
;
|
(jusqu'à C++23) | |
|
/*floating-point-type*/
atan2
(
/*floating-point-type*/
y,
|
(depuis C++23)
(constexpr depuis C++26) |
|
|
float
atan2f
(
float
y,
float
x
)
;
|
(2) |
(depuis C++11)
(constexpr depuis C++26) |
|
long
double
atan2l
(
long
double
y,
long
double
x
)
;
|
(3) |
(depuis C++11)
(constexpr depuis C++26) |
|
Surcharge SIMD
(depuis C++26)
|
||
|
Défini dans l'en-tête
<simd>
|
||
|
template
<
class
V0,
class
V1
>
constexpr
/*math-common-simd-t*/
<
V0, V1
>
|
(S) | (depuis C++26) |
|
Surcharges supplémentaires
(depuis C++11)
|
||
|
Défini dans l'en-tête
<cmath>
|
||
|
template
<
class
Integer
>
double atan2 ( Integer y, Integer x ) ; |
(A) | (constexpr depuis C++26) |
std::atan2
pour tous les types à virgule flottante non qualifiés cv comme type des paramètres.
(depuis C++23)
|
S)
La surcharge SIMD effectue un calcul
std::atan2
élément par élément sur
v_y
et
v_x
.
|
(depuis C++26) |
|
A)
Des surcharges supplémentaires sont fournies pour tous les types entiers, qui sont traités comme
double
.
|
(depuis C++11) |
Table des matières |
Paramètres
| y, x | - | valeurs à virgule flottante ou entières |
Valeur de retour
If no errors occur, the arc tangent of y / x ( arctan(| y |
| x |
Si une erreur de domaine se produit, une valeur définie par l'implémentation est retournée (NaN là où supporté).
Si une erreur de plage se produit en raison d'un dépassement inférieur, le résultat correct (après arrondi) est retourné.
Gestion des erreurs
Les erreurs sont signalées comme spécifié dans math_errhandling .
Une erreur de domaine peut survenir si x et y sont tous deux nuls.
Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),
- Si x et y sont tous deux nuls, une erreur de domaine ne se produit pas .
- Si x et y sont tous deux nuls, une erreur de plage ne se produit pas non plus.
- Si y est nul, une erreur de pôle ne se produit pas.
- Si y est ±0 et x est négatif ou -0, ±π est retourné.
- Si y est ±0 et x est positif ou +0, ±0 est retourné.
- Si y est ±∞ et x est fini, ±π/2 est retourné.
- Si y est ±∞ et x est -∞, ±3π/4 est retourné.
- Si y est ±∞ et x est +∞, ±π/4 est retourné.
- Si x est ±0 et y est négatif, -π/2 est retourné.
- Si x est ±0 et y est positif, +π/2 est retourné.
- Si x est -∞ et y est fini et positif, +π est retourné.
- Si x est -∞ et y est fini et négatif, -π est retourné.
- Si x est +∞ et y est fini et positif, +0 est retourné.
- Si x est +∞ et y est fini et négatif, -0 est retourné.
- Si l'un des deux, x est NaN ou y est NaN, NaN est retourné.
Notes
std :: atan2 ( y, x ) est équivalent à std:: arg ( std:: complex < std:: common_type_t < decltype ( x ) , decltype ( y ) >> ( x, y ) ) .
POSIX spécifie qu'en cas de dépassement inférieur, la valeur y / x est retournée, et si cela n'est pas pris en charge, une valeur définie par l'implémentation n'excédant pas DBL_MIN , FLT_MIN , et LDBL_MIN est retournée.
Les surcharges supplémentaires ne sont pas tenues d'être fournies exactement comme (A) . Elles doivent seulement être suffisantes pour garantir que pour leur premier argument num1 et second argument num2 :
|
(jusqu'en C++23) |
|
Si
num1
et
num2
ont des types arithmétiques, alors
std
::
atan2
(
num1, num2
)
a le même effet que
std
::
atan2
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
Si aucun tel type à virgule flottante avec le plus grand rang et la plus grande sous-catégorie n'existe, alors la résolution de surcharge ne résulte pas en un candidat utilisable parmi les surcharges fournies. |
(depuis C++23) |
Exemple
#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() { // utilisation normale : les signes des deux arguments déterminent le quadrant print_coordinates(+1, +1); // atan2( 1, 1) = +pi/4, Quadrant I print_coordinates(-1, +1); // atan2( 1, -1) = +3pi/4, Quadrant II print_coordinates(-1, -1); // atan2(-1, -1) = -3pi/4, Quadrant III print_coordinates(+1, -1); // atan2(-1, 1) = -pi/4, Quadrant IV // valeurs spéciales 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'; }
Sortie :
(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
Voir aussi
|
(C++11)
(C++11)
|
calcule l'arc sinus (
arcsin(x)
)
(fonction) |
|
(C++11)
(C++11)
|
calcule l'arc cosinus (
arccos(x)
)
(fonction) |
|
(C++11)
(C++11)
|
calcule l'arc tangente (
arctan(x)
)
(fonction) |
|
retourne l'angle de phase
(fonction template) |
|
|
applique la fonction
std::atan2
à un valarray et une valeur
(fonction template) |
|
|
Documentation C
pour
atan2
|
|