Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ acos(3M) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

math(3M)

hypot(3M)

sqrt(3M)

mathtrap(3)

SIN(3M)  —  NEWS-OS Programmer’s Manual

名称

sin, cos, tan, asin, acos, atan, atan2 − 三角関数及びそれらの逆関数

形式

#include <math.h>

double sin(x)
double x;

double cos(x)
double x;

double tan(x)
double x;

double asin(x)
double x;

double acos(x)
double x;

double atan(x)
double x;

double atan2(y,x)
double y,x;

解説

sin、 cos 及び tan は、 ラジアンで表される引数 x の、 三角関数の値を 返します。

asin は、 −π/2 から π/2 の範囲で、 逆正弦を 返します。

acos は、 0 から π の範囲で、 逆余弦を 返します。

atan は、 −π/2 から π/2 の範囲で、 逆正接を 返します。

NEWS 上では、

sign(y)∗π/2x = 0 かつ y != 0 の場合
atan2(y,x) :=atan(y/x)x > 0 の場合
sign(y)∗(π − atan(|y/x|))x < 0 の場合
0x = y = 0 の場合
sign(y)∗π/2x = 0 かつ y ≠ 0 の場合

診断

NEWS 上では、 |x|>1 の場合、 asin(x) 及び acos(x) は NaN(Not a number) を返します。

注意事項

atan2(0,0) は以前、 エラーメッセージを 生じる可能性がありましたが、 NEWS 上で atan2 は、 atan2(0,0)=0 と定義しています。 atan2(0,0) にその値を 割り当てた理由は、 次の通りです。

(1)atan2(0,0) を計算しないように 引数をチェックしているプログラムにとっては、 無関係です。 また、 atan2(0,0) に対してエラーが生じることを仮定している プログラムに対しては、 対処のしようがありません。 異なったマシンでのエラーに対するアクションは、 違ったものになるからです。

(2)atan2 を 使って、 x = r∗cosθ かつ y = r∗sinθ を 満たす直交座標 (x,y) から 極座標 (r,θ) への変換を 行います。 NEWS 上では、 (x=0,y=0) が (r=0,θ=0) にマップされた場合に、 これらの方程式が満たされます。 一般に、 極座標への変換は次のように計算されるべきです。

r := hypot(x,y); ... := √(x2+y2)
θ := atan2(y,x).

(3)前述の公式を、 IEEE 754 に準ずるマシン上で、 符号付きゼロ及び無限大に、 正当な方法で対処するよう変化させる必要はありません。 このようなマシンに与えられる hypot 及び atan2 のバージョンは、 全てのケースを 扱うように設計されています。 このようなわけで、 atan2(±0,−0)= ±π, となります。 一般に前記の公式は、 次のものと同値です。

r := √(x2+y2); もし r = 0 ならば x := copysign(1,x);
もし x > 0ならばθ := 2∗atan(y/(r+x))
そうでなければθ := 2∗atan((r−x)/y);

ただし、 r が無限大の場合を除きます。 この場合、 atan2 は、 π/4 を 数倍した値になり、 これは別の値のときに取られる範囲内でなければなりません。

エラー(丸め他に関すること)

コンピュータに格納された値 P を、 π =3.1415926... の代わりに円周率として用います。 P は π と ulp の数分の 1 だけ違います。 その差は、 引数 x が非常に大きな値のときにのみ 重大ですが、 それでも、 その差は x の曖昧さによって無効となる傾向があります。 さらに、 明らかに π に関係しない三角恒等式はどれも、 P = π かどうかにかかわらず、 申し分なく一様に満たされています。 たとえば、 x がどんなに大きな値であろうともかわりなく、 ごく小さい ulp 範囲内で、 sin2(x)+cos2(x) = 1 かつ sin(2x) = 2sin(x)cos(x) が成り立ちます。 従って、 P と π の差は、 科学技術計算にはほとんど影響を およぼしません。

関連事項

math(3M), hypot(3M), sqrt(3M), mathtrap(3). 

著者

Robert P. Corbett, W. Kahan, Stuart I. McDonald, Peter Tang 及び IEEE 754のコードに関しては Dr. Kwok−Choi Ng. 

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026