スポンサーリンク

ATAN2(3) FreeBSD ライブラリ関数マニュアル ATAN2(3)

名称

atan2, atan2f − 2 つの変数の逆正接関数

ライブラリ

数値計算ライブラリ (libm, −lm)

書式

#include <math.h>

double

atan2(double y, double x);

float

atan2f(float y, float x);

解説

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

戻り値

atan2() 関数と atan2f() 関数は、処理が成功すると、範囲 [-pi, +pi] のラジ アンで、 y/x の逆正接を返します。 xy の両方が 0 の場合、グローバル変 数 errno が EDOM に設定されます。 VAX では次のとおりです。

atan2(y, x) := atan(y/x) x > 0 の場合
sign(y)*(pi - atan(|y/x|)) 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) を、極座標 (r,theta) に変換するため に最も良く使用されます。この座標は、 r∗cos theta および y = r∗sin theta を満たします。 (r,theta) 満たされるのは、(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) = ±pi である理由です。一般に、上記の公式は次のものと同等です。

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() 関数は ISO/IEC 9899:1990 (‘‘ISO C89’’) に適合しています。

FreeBSD 10.0 May 2, 1991 FreeBSD 10.0

スポンサーリンク