std::atan2, std::atan2f, std::atan2l
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float atan2 ( float y, float x ); double atan2 ( double y, double x ); |
(C++23まで) | |
| /*浮動小数点数型*/ atan2 ( /*浮動小数点型*/ y, |
(C++23から) (C++26 以降 constexpr) |
|
float atan2f( float y, float x ); |
(2) | (C++11以降) (C++26 以降 constexpr) |
long double atan2l( long double y, long double x ); |
(3) | (C++11以降) (C++26 以降 constexpr) |
| 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) | (C++26 以降 constexpr) |
std::atan2 のオーバーロードを提供します。(since C++23)|
S) SIMD オーバーロードは、v_y および v_x に対して要素ごとの
std::atan2 を実行します。
|
(C++26以降) |
|
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。
|
(C++11以降) |
目次 |
[編集] パラメータ
| y, x | - | 浮動小数点または整数値 |
[編集] 戻り値
エラーが発生しなかった場合、y / x のアークタンジェント(arctan(| y |
| x |
領域エラーが発生した場合、実装定義の値が返される (サポートされている場合は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 と2番目の引数 num2 に対して以下を保証するのに十分である必要がある。
|
(C++23まで) |
|
num1 と num2 が算術型の場合、std::atan2(num1, num2) は std::atan2(static_cast</*共通浮動小数点型*/>(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() { // normal usage: the signs of the two arguments determine the quadrant print_coordinates(+1, +1); // atan2( 1, 1) = +pi/4, Quad I print_coordinates(-1, +1); // atan2( 1, -1) = +3pi/4, Quad II print_coordinates(-1, -1); // atan2(-1, -1) = -3pi/4, Quad III print_coordinates(+1, -1); // atan2(-1, 1) = -pi/4, Quad IV // special values 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)) (関数) |
| 偏角を返す (関数テンプレート) | |
| valarray と値に std::atan2 関数を適用します。 (function template) | |