プログラミング言語における実装
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/28 07:05 UTC 版)
「atan2」の記事における「プログラミング言語における実装」の解説
atan2のプログラミング言語での実装は言語毎に異なる。 Microsoft Excel、OpenOffice.org Calc、LibreOffice Calc、Google Spreadsheets, iWork Numbers、およびANSI SQL:2008 standardでは、2つの引数をもつatan2関数はそのままの順序の引数 ( Re , Im ) {\displaystyle (\operatorname {Re} ,\operatorname {Im} )} で定義されている (引数の関係の入れ替わりについては § 図による可視化を参照)。 MathematicaではArcTan[x, y]の形式が用いられ、引数が一つの場合は通常のアークタンジェントになる。MathematicaではArcTan[0, 0]は不定となる。 入れ替わった順序の引数 ( Im , Re ) {\displaystyle (\operatorname {Im} ,\operatorname {Re} )} は下記で用いられている: C言語のatan2関数を始めとする多くのプログラミング言語では、直交座標系から極座標系への変換の手間を減らすため、引数は入れ替わったものが使われており、atan2(0, 0)も定義されている。実装においては−0を除外している、あるいは+0が引数に指定された場合には単純にゼロと定義している。関数は常に[−π, π]の間の値を返し、エラーやNaN (Not a Number)を返すことはしない。 Common Lispでは引数の数は可変なので、atan関数は1つの場合とx座標を付加した(atan y x)が定義されている。 Juliaでは、Common Lisp同様にatan2関数を定義する代わりに、atanが1つまたは2つの引数を持っている。 1つの関数が複数のメソッドを行う副作用として、コンパイル時の最適化時間が多くなってしまう。 Intelアーキテクチャーのアセンブラコードでは、 atan2はFPATAN (floating-point partial arctangent) 命令で実装される。この命令は無限大を扱うことができ、結果は閉区間[−π, π]の値となる。例えば、有限のxに対し、atan2(∞, x) = +π/2となる。特に両方の引数がゼロである時、FPATANは下記のようになる:atan2(+0, +0) = +0; atan2(+0, −0) = +π; atan2(−0, +0) = −0; atan2(−0, −0) = −π. この定義は-0の定義に従ったものとなる。 コード以外での学術論文などの数学的表記では、通常の arctanおよびtan−1の最初の1文字を大文字にしたArctanおよびTan−1が用いられる。用法は複素数の偏角と同様で、Atan(y, x) = Arg(x + i y)となる。 シンボリック算術をサポートする実装系では通常、atan2(0, 0) は不定値あるいはエラーを返す。 -0、無限大やNaNをサポートする実装系(例:IEEE 754)では、−π and −0を含む値を返すように拡張されている場合がある。これら実装系では、NaNが入力された時にNaNあるいは例外を返すよう実装されていることも多い。 -0をサポートする実装系(例:IEEE 754)では、atan2(y, x)の実装が−0の入力を的確に処理できない場合、atan2(−0, x), x < 0 の時に−πを返すリスクがある。 netlibで公開されているフリーの算術ライブラリーであるFDLIBM (Freely Distributable LIBM)では、atan2のソースコードが公開されており、IEEEの例外値の対処方法を確認することができる。 ハードウェアによる乗算器を持たない実装系では、atan2関数はCORDIC(英語版)による数値的に十分な近似により実装されている。よってatan(y)の実装もatan2(y, 1)の実装を用いている場合がある。
※この「プログラミング言語における実装」の解説は、「atan2」の解説の一部です。
「プログラミング言語における実装」を含む「atan2」の記事については、「atan2」の概要を参照ください。
- プログラミング言語における実装のページへのリンク