std:: atan2, std:: atan2f, std:: atan2l
|
ヘッダー
<cmath>
で定義
|
||
| (1) | ||
|
float
atan2
(
float
y,
float
x
)
;
double
atan2
(
double
y,
double
x
)
;
|
(C++23まで) | |
|
/*floating-point-type*/
atan2
(
/*floating-point-type*/
y,
|
(C++23から)
(constexpr C++26から) |
|
|
float
atan2f
(
float
y,
float
x
)
;
|
(2) |
(C++11から)
(constexpr C++26から) |
|
long
double
atan2l
(
long
double
y,
long
double
x
)
;
|
(3) |
(C++11から)
(constexpr C++26から) |
|
SIMDオーバーロード
(C++26から)
|
||
|
ヘッダー
<simd>
で定義
|
||
|
template
<
class
V0,
class
V1
>
constexpr
/*math-common-simd-t*/
<
V0, V1
>
|
(S) | (C++26から) |
|
追加のオーバーロード
(C++11から)
|
||
|
ヘッダー
<cmath>
で定義
|
||
|
template
<
class
Integer
>
double atan2 ( Integer y, Integer x ) ; |
(A) | (constexpr C++26から) |
std::atan2
のオーバーロードを提供します。
(C++23以降)
|
S)
SIMDオーバーロードは、
v_y
と
v_x
に対して要素ごとの
std::atan2
を実行します。
|
(C++26以降) |
|
A)
すべての整数型に対して追加のオーバーロードが提供されており、これらは
double
として扱われます。
|
(since C++11) |
目次 |
パラメータ
| y, x | - | 浮動小数点または整数値 |
戻り値
If no errors occur, the arc tangent of y / x ( arctan(| y |
| x |
定義域エラーが発生した場合、実装定義の値が返されます(NaNがサポートされている場合はNaN)。
アンダーフローによる範囲エラーが発生した場合、正しい結果(丸め後)が返されます。
エラーハンドリング
エラーは、 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が返される。
注記
std :: atan2 ( y, x ) は std:: arg ( std:: complex < std:: common_type_t < decltype ( x ) , decltype ( y ) >> ( x, y ) ) と等価です。
POSIXは アンダーフローが発生した場合、 y / x の値を返すことを規定しており、それがサポートされていない場合は、 DBL_MIN 、 FLT_MIN 、および LDBL_MIN を超えない実装定義の値が返されます。
追加のオーバーロードは (A) と完全に同一である必要はありません。それらは、第一引数 num1 と第二引数 num2 について以下を保証するのに十分であればよいのです:
|
(C++23以前) |
|
num1
と
num2
が算術型を持つ場合、
std
::
atan2
(
num1, num2
)
は
std
::
atan2
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
最も高いランクとサブランクを持つ浮動小数点型が存在しない場合、 オーバーロード解決 は提供されたオーバーロードから使用可能な候補を結果として生成しない。 |
(C++23以降) |
例
#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() { // 通常の使用法: 2つの引数の符号が象限を決定する print_coordinates(+1, +1); // atan2( 1, 1) = +pi/4, 第I象限 print_coordinates(-1, +1); // atan2( 1, -1) = +3pi/4, 第II象限 print_coordinates(-1, -1); // atan2(-1, -1) = -3pi/4, 第III象限 print_coordinates(+1, -1); // atan2(-1, 1) = -pi/4, 第IV象限 // 特殊な値 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'; }
出力:
(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
関連項目
|
(C++11)
(C++11)
|
アークサインを計算する (
arcsin(x)
)
(関数) |
|
(C++11)
(C++11)
|
アークコサインを計算する (
arccos(x)
)
(関数) |
|
(C++11)
(C++11)
|
アークタンジェントを計算する (
arctan(x)
)
(関数) |
|
位相角を返す
(関数テンプレート) |
|
|
関数
std::atan2
をvalarrayと値に適用する
(関数テンプレート) |
|
|
Cドキュメント
for
atan2
|
|