Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

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

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

math(3M)

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

名称

lgamma − 対数ガンマ関数

形式

#include <math.h>

double lgamma(x)
double x;

解説

 
lgamma は ln|Γ(x)| の値を返します。ここで

Γ(x) = ∫0s10∞ tx−1 e−t dt(x > 0 のとき)

Γ(x) = π/(Γ(1−x)sin(πx)) (x < 1 のとき)

と定義されます。
整数型外部変数 signgam に Γ(x) の符号が返されます。

特徴

g := Γ(x) を計算するのに、 signgam ∗ exp(lgamma(x)) という表現は使えません。 その代わり、 (C言語では)次のようにプログラミングします。

lg = lgamma(x);  g = signgam∗exp(lg);

lgamma が値を返した後でのみ、 signgam は適切な値に変更されます。 Γ(x) は、 x が大きすぎるとオーバーフローを、 −x が大きすぎるとアンダーフローを起こします。 また、 x が 0 または負の整数のとき、 0 での除算を 引き起こします。

UNIX における C 言語用数学ライブラリでは、 今まで関数名 gamma だけが lnΓ(x) の機能を 持っていました。 他の場合、 例えば、 IBM の FORTRAN ライブラリでは、 関数名 GAMMA が Γ を、 また、 関数名 ALGAMA が単精度の lnΓ を、 関数名 DGAMMA と DLGAMA が倍精度の 関数名として使われていました。 なぜ、 C 言語は、 そうなっていないのでしょう?

昔の記録によると、 C 言語の gamma は、 その初期の頃に ln(Γ(|x|)) の値を 返していたということです。 その後、 プログラム gamma は、 負の引数 x に対処するように、 より普遍的な方法に書き換えられました。 しかし、 この変更は、 ドキュメントには正確に記載されませんでした。 最近の変更は、 x が負の時に、 たいてい生じる不確実な値を 補正し、 条件式なしに Γ(x) を 計算することです。 プログラマは、 lgamma がすでに完成されたものと、 決めてかかるべきではありません。

いずれ、 関数 gamma は復活し、 FORTRAN でそうしているように、 gamma 関数として使われるでしょう。 この理由は、 FORTRAN との互換性からというよりむしろ、 |x| の値が小さいほど計算速度を 速くし、 |x| の値が大きいほど精度が高くなるようにしたいからです。

昔の感覚で、 関数名 gamma を 使いたいプログラマは、 現在 lgamma があるので、 次の 2つの方法のうちどれかを 選択します。

1) 旧数学ライブラリ libom を 使う。

2) あなたのプログラムに、 次のプログラムを 追加する。

#include <math.h>
double gamma(x)
double x;
{
return (lgamma(x));
}

関連事項

math(3M)

バグ

このマニュアルを正しく出力するためには、 −t オプション を使わなければなりません。

例:
画面出力 :man −t lgamma | xprev
プリンタ出力 :man −t lgamma | lpr −n

NEWS-OSRelease 4.2.1R

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