ATAN2(3)

名称
atan2, atan2f - 2 つの変数の逆正接関数

ライブラリ
libm

書式
#include <math.h> double atan2(double y, double x) float atan2f(float y, float x)

解説
atan2() 関数と atan2f() 関数は、 y/x の逆正接の主値を計算します。その際、 両方の引数の符号を使用して戻り値の象限を判定します。

戻り値
atan2() 関数と atan2f() 関数は、処理が成功すると、範囲 [-, +] のラジアンで、 y/x の逆正接を返します。 x と y の両方が 0 の場合、 グローバル変数 errno が EDOM に設定されます。 VAX では次のとおりです。
atan2(y, x) := |
atan(y/x) | x > 0 の場合
 | sign(y)*( -
atan(\*(Bay/x\*(Ba, )) | x < 0 の場合
 |
0 | x = y = 0 の場合、
 |
sign(y)*\*(Pi/2 | x = 0 ≠ y の場合

注
関数 atan2() は VAX で ``x > 0 の場合''、 atan2(0, 0) = 0 を定義します。以前は atan2(0, 0) はエラーメッセージを生成していた 可能性があるにもかかわらずです。 atan2(0, 0) に値を割り当てる理由は次のとおりです。

1.  atan2(0, 0) の計算を回避するために引数をテストするプログラムは、この値に 無関係である必要があります。これが無効であることを要求するプログラムは、 さまざまなコンピュータシステム上でこれが無効であることに対するさまざまな 反応に対し脆弱です。

2.  atan2() 関数は、矩形 (x,y) を、極座標 に変換するために最も良く使用されます。この座標は、 および y = を満たします。 満たされるのは、(x=0,y=0) が VAX で (r=0,theta=0) にマップされるときです。 一般に、極座標への変換は次のようにして計算する必要があります。

        r	:= hypot(x,y); ... := sqrt(x*x+y*y)
        theta   := atan2(y,x)

3.  上記の公式は、 IEEE 754 に準拠するマシンでは符号付きの 0 および無限に、 合理的な方法で、対処しようと変更する必要はありません。そのようなマシン用に 提供されている hypot(3) と atan2() はすべてのケースを処理するよう 設計されています。これがたとえば atan2(±0, -0) = ± である理由です。一般に、 上記の公式は次のものと同等です。

        r := sqrt(x*x+y*y); r =0 の場合は、x := copysign(1,x);

関連項目
acos(3), asin(3), atan(3), cos(3), cosh(3), math(3), sin(3), sinh(3), tan(3), tanh(3)

規格
atan2() 関数は isoC に適合しています。