EN JA
ATAN2(3)
ATAN2(3) FreeBSD Library Functions Manual ATAN2(3)

名称

atan2, atan2f, atan2l, carg, cargf, cargl逆正接と複素数位相角関数

ライブラリ

Math Library (libm, -lm)

書式

#include < math.h>

double
atan2( double y, double x);

float
atan2f( float y, float x);

long double
atan2l( long double y, long double x);

#include < complex.h>

double
carg( double complex z);

float
cargf( float complex z);

long double
cargl( long double complex z);

解説

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

carg(), cargf() と cargl() 関数は、 z の複素数の引数 (または、位相角) を計算します。副素数の引数は、 z = r * e^(I * theta) の数シータ (theta) です、ここで r = cabs(z) です。呼び出し carg(z) は、 atan2(cimag(z), creal(z)) と同等で、 cargf() と cargl() に似ています。

戻り値

atan2(), atan2f() と atan2l() 関数は、処理が成功すると、範囲[-pi, +pi]のラジアンで、 y/ x の逆正接を返します。ここに、いくつかの特別なケースがあります:
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() は、``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 を満たします。これらの等式が満たされるのは、 (x=0,y=0) が (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);

規格

atan2(), atan2f(), atan2l(), carg(), cargf() と cargl() 関数は、 ISO/IEC 9899:1999 (“ISO C99”) に適合しています。
July 31, 2008 FreeBSD