Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ log10(3M) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

math(3M)

EXP(3M)  —  UNIX Programmer’s Manual

名称

exp, expm1, log, log10, log1p, pow  −  指数、対数、べき乗数

形式

#include <math.h>

double exp(x)
double x;

double expm1(x)
double x;

double log(x)
double x;

double log10(x)
double x;

double log1p(x)
double x;

double pow(x,y)
double x,y;

解説

exp は x の指数関数を返します。

expml は小さな x に対しても、 与えられた x に対して十分に精度の良い exp(x)−1 を 返します。

log は x の自然対数を返します。

log10 は 10 を底とした x の対数を返します。

log1p は小さな x に対しても、 与えられた x に対して十分に精度の良い log(1+x) を返します。

pow(x, y)は x の y 乗を返します。 xy. 

(丸めなどによる)誤差

exp(x) および expm1(x)、 log(x)、 log1p(x)は、 1 ulp 以内の精度があります。 log10(x) は約 2 ulps の精度です。 1 ulp とは、 最終桁の 1単位 (Unit in the Last Place) です。 値の大きさが適度なときには、pow(x, y) の誤差は 約 2 ulps 未満ですが、 ほとんどのビットが浮動小数点形式の指数フィールドによって 占められて失われるほどまで、 pow(x, y) がオーバー/アンダーフローの限界近くに達すると、 誤差は増加します。 これは、 IEEE 754 Double では 11 ビットです。 テストでは、 このような徹底的なロスは現われていません。 観察された最悪の誤差は、 IEEE 754 Doubleでは300 ulps未満です。 pow(整数,整数)が、 厳密に、 IEEE 754 では 2∗∗53 より大きくなるまで、 pow の適度な値は十分に正確です。

注意

関数 exp(x)−1 と log(1+x) は、 Hewlett−Packard HP-71B および APPLE Macintosh 上の BASIC では expm1 および logp1 と呼ばれ、 APPLE Macintoshes 上の Pascal では EXP1 と LN1、 同マシン上の Cでは exp1 と log1 と呼ばれます。 ここでは、x が小さいときに(1+x)∗∗n−1)/x、 主に expm1(n∗log1p(x))/x の財務計算が正確であることを 期するために提供されています。 これらは正確な逆双曲線関数も提供しています。

pow(x, 0) は、 x の 0 乗とし、 すべてのxに対して 1 を返します (x=0、プラス無限大、NaN のいずれであっても)。 pow の以前のインプリメンテーションでは、 ある場合、 またはすべての場合について、 x∗∗0 は未定義とされていました。 常に x∗∗0=1 を返すには、 次のような理由があります。

(1)
 x∗∗0を 計算する前に x がゼロ(または無限大または NaN)かどうか テストするプログラムでは、 0∗∗0=1 かどうかは問題になりません。 式の意味とその結果(0∗∗0 が無効の場合)は コンピュータシステムによって異なりますので、 0∗∗0 が無効であることに依存するプログラムはすべて不定となります。

(2)ある代数の本(例えば、 Sigler の本)では、 x=0 を含むすべての x について、 x∗∗0=1 と定義しています。 これは、 次のように多項式の値として a[0] を扱う規定について、 x=0 のときに a[0]∗0∗∗0 を無効として退けるよりも、 融通性があります。

p(x) = a[0]∗x∗∗0 + a[1]∗x∗∗1 + a[2]∗x∗∗2 +...+ a[n]∗x∗∗n

(3)解析屋さんは、x と y が互いに独立で 0 に近づくならば x∗∗y の結果は いずれにしても、0∗∗0=1 を許容します。 常に 0∗∗0=1 を設定する理由は、 次のとおりです。

x(z) と y(z) が z=0 について解析可能(べき乗級数に展開可能)な関数で、 x(0)=y(0)=0 で z が充分小さいとき、x(z)∗∗y(z) → 1 (z→0)です。

(4)0∗∗0=1 の場合には、 ∞∗∗0=1/0∗∗0=1 になります。 また NaN∗∗0=1 です。 これはすべての有限、 無限の x に対して x∗∗0=1 だからです。

関連事項

math(3M), mathtrap

著者

Kwok-Choi Ng, W. Kahan

NEWS-OSRelease 3.3

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