npt-japanese

% Function ASIN, ACOS, ATAN

UP


Function ASIN, ACOS, ATAN

Function ASIN, ACOS, ATAN

構文

asin number => radians
acos number => radians
atan number1 &optional number2 => radians

引数と戻り値

number - 数
number1 - number2が指定されていないときは数、 またはnumber2が指定されているときは実数
number2 - 実数
radians - 数(ラジアン)

定義

asin, acos, atanは、 逆三角関数であるアークサイン、アークコサイン、アークタンジェント (以降arcsin, arccos, arctanと記載)をそれぞれ計算します。

arcsin, arccos, arctan(number1のみ指定されたとき)の関数は、 numbernumber1xと指定したときに 数学的には次の表のように定義できます。

arcsin: -i log(ix + sqrt(1 - x^2))
arccos: (pi/2) - arcsin(x)
arctan: -i log((1 + ix) sqrt(1/(1 + x^2)))

Figure 12-14. arcsin, arccos, arctanの数学的な定義

これらの公式は、完全に正確に計算されたと仮定したときは 数学的には正しいです。 これらは実数値の計算のためのもっとも単純なものではありません。

もしatannumber1number2の両方が指定されたとき、 結果はnumber1/number2のarctanになります。 マイナスゼロがサポートされていないときは、 atanの値は常に-pi(含まれない)からpi(含む)になります。 マイナスゼロがサポートされてるときは、 2つの引数のarctanの範囲は-pi(含む)になります。

number1が実数のとき、結果は実数であり、 -pi/2からpi/2(両者とも境界は含まれない)の間に含まれます。 number2が指定されないときにnumber1は複素数にすることができます。 もし両方指定されたとき、 number1がゼロではないときにnumber2はゼロに指定できます。

次の定義はarcsinであり、範囲とブランチカットを決定します。

arcsin(z) = -i log(iz + sqrt(1 - z^2))

arcsin関数のブランチカットは、2つの部分から成ります。 ひとつは負の実軸の-1(含む)の左から第2象限へ沿って続くものであり、 もうひとつは正の実軸の1(含む)の右から第4象限に沿って続くものです。 この範囲は複素平面に含まれる数の実部-pi/2からpi/2で分岐します。 実部が-pi/2と等しい数は、その虚部が非負であるときのみの範囲になります。 実部がpi/2と等しい数は、その虚部が非正であるときのみの範囲になります。

次の定義はarccosであり、範囲とブランチカットを決定します。

arccos(z) = (pi/2) - arcsin(z)

または次の式と同等です。

arccos(z) = -i log(z + i sqrt(1 - z^2))
arccos(z) = {2 log(sqrt((1 + z) / 2) + i sqrt((i - z)/2))}/i

arccos関数のブランチカットは、2つの部分からなります。 ひとつは負の実軸の-1(含む)の左から第2象限へ沿って続くものであり、 もうひとつは正の実軸の1(含む)の右から第4象限に沿って続くものです。 これはarcsinのブランチカットと同じです。 この範囲は複素平面に含まれる数の実部0からpiで分岐します。 実部が0と等しい数は、その虚部が非負であるときのみの範囲になります。 実部がpiと等しい数は、その虚部が非正であるときのみの範囲になります。

次の定義は(ひとつの引数の)arctanであり、範囲とブランチカットを決定します。

arctan(z) = {log(1 + iz) - log(1 - iz)}/(2i)

この単純な公式に注意してください。 「明らかな」単純化はブランチカットの変更や ブランチカット上の正しくない値になる可能性があります。 arctan関数のブランチカットは、2つの部分からなります。 ひとつは正の虚軸のi(含まれない)上方から第2象限へ沿って続くものであり、 もうひとつは負の虚軸の-i(含まれない)下方から第4象限へ沿って続くものです。 このi-iの点はその領域から排他的です。 この範囲は複素平面に含まれる数の実部-pi/2からpi/2で分岐します。 実部が-pi/2と等しい数は、その虚部が厳密に正であるときのみの範囲になります。 実部がpi/2と等しい数は、その虚部が厳密に負であるときのみの範囲になります。 したがってarctanの範囲は、arcsinの-pi/2pi/2の排他的な点と同一です。

atanは、number1xとして示される)の符号と number2yとして示される)の符号は、象限の情報から導出されます。 次の表はさまざまな特別な場合の詳細です。 図中のエントリーにあるアスタリスク*は、 マイナスゼロをサポートした実装で適用するものを示しています。

* yの状態 xの状態 直交座標の位置 結果の範囲
  y = 0 x > 0 正のx軸 0
* y = +0 x > 0 正のx軸 +0
* y = -0 x > 0 正のx軸 -0
  y > 0 x > 0 第1象限 0 < result< pi/2
  y > 0 x = 0 正のy軸 pi/2
  y > 0 x < 0 第2象限 pi/2 < result < pi
  y = 0 x < 0 負のx軸 pi
* y = +0 x < 0 負のx軸 +pi
* y = -0 x < 0 負のx軸 -pi
  y < 0 x < 0 第3象限 -pi < result < -pi/2
  y < 0 x = 0 負のy軸 -pi/2
  y < 0 x > 0 第4象限 -pi/2 < result < 0
  y = 0 x = 0 原点 未定義の結果
* y = +0 x = +0 原点 +0
* y = -0 x = +0 原点 -0
* y = +0 x = -0 原点 +pi
* y = -0 x = -0 原点 -pi

Figure 12-15. arctan関数の象限の情報

例文

(asin 0) =>  0.0 
(acos #c(0 1))  =>  #C(1.5707963267948966 -0.8813735870195432)
(/ (atan 1 (sqrt 3)) 6)  =>  0.087266 
(atan #c(0 2)) =>  #C(-1.5707964 0.54930615)

影響

なし。

例外

acosasinは、もしnumberが数ではないときは 型type-errorのエラーを通知するべきです。 atanは、引数がひとつ与えられ、その引数が数ではないか、 あるいはふたつの引数が与えられ、それら両方の引数が実数ではなかったとき、 型type-errorのエラーを通知するべきです。

acos, asin, atanは、 型arithmetic-errorを通知するかもしれません。

参考

log, sqrt, 12.1.3.3. 浮動小数の代替可能性の規則

備考

asinacosのどちらの場合も、 numberが複素数ではないときでさえ結果が複素数になることができます。 これはnumberの絶対値が1より大きいときに生じます。


TOP, Github