Location : Home > Languages > Perl > Package Title : Math::Cephes |
![]() |
Math::Cephes - Cephes math library へのインタフェース
use Math::Cephes qw(:all);
use Math::Cephes qw(sin cos);
関数のインポートグループで定義されたエクスポートタグを使うこともできる。
use Math::Cephes qw(:constants);
$PI: | 3.14159265358979323846 | # pi |
$PIO2: | 1.57079632679489661923 | # pi/2 |
$PIO4: | 0.785398163397448309616 | # pi/4 |
$SQRT2: | 1.41421356237309504880 | # sqrt(2) |
$SQRTH: | 0.707106781186547524401 | # sqrt(2)/2 |
$LOG2E: | 1.4426950408889634073599 | # 1/log(2) |
$SQ2OPI: | 0.79788456080286535587989 | # sqrt( 2/pi ) |
$LOGE2: | 0.693147180559945309417 | # log(2) |
$LOGSQ2: | 0.346573590279972654709 | # log(2)/2 |
$THPIO4: | 2.35619449019234492885 | # 3*pi/4 |
$TWOOPI: | 0.636619772367581343075535 | # 2/pi |
同様に4つのマシン依存の数も利用可能である。
$MACHEP : | マシンの丸め誤差 |
$MAXLOG : | マシンの最大対数 |
$MINLOG : | マシンの最小対数 |
$MAXNUM : | 表示可能な最大数 |
をインポートする。
use Math::Cephes qw(:trigs);
acos: | アークコサイン |
asin: | アークサイン |
atan: | アークタンジェント |
atan2: | 4象限アークタンジェント |
cos: | コサイン |
cosdg: | コサイン(度) |
cot: | コタンジェント |
cotdg: | コタンジェント(度) |
hypot: | 直角三角形の斜辺 |
radian: | 度をラジアンに変換 |
sin: | サイン |
sindg: | サイン(度) |
tan: | タンジェント |
tandg: | タンジェント(度) |
cosm1: | 単位付近の関数引数に対する相対誤差 |
をインポートする。
use Math::Cephes qw(:hypers);
acosh: | 逆ハイパボリックコサイン |
asinh: | 逆ハイパボリックサイン |
atanh: | 逆ハイパボリックタンジェント |
cosh: | ハイパボリックコサイン |
sinh: | ハイパボリックサイン |
tanh: | ハイパボリックタンジェント |
をインポートする。
use Math::Cephes qw(:explog);
exp: | 指数関数 |
expxx: | exp(x*x) |
exp10: | 基が 10 の指数関数 |
exp2: | 基が 2 の指数関数 |
log: | 自然対数 |
log10: | 常用対数 |
log2: | 基が 2 の対数 |
log1p,expm1: | Relative error approximations for function arguments near unity. |
をインポートする。
use Math::Cephes qw(:cmplx);
new_cmplx: | create a new complex number object |
cabs: | Complex absolute value |
cacos: | Complex circular arc cosine |
cacosh: | Complex inverse hyperbolic cosine |
casin: | Complex circular arc sine |
casinh: | Complex inverse hyperbolic sine |
catan: | Complex circular arc tangent |
catanh: | Complex inverse hyperbolic tangent |
ccos: | Complex circular cosine |
ccosh: | Complex hyperbolic cosine |
ccot: | Complex circular cotangent |
cexp: | Complex exponential function |
clog: | Complex natural logarithm |
cadd: | add two complex numbers |
csub: | subtract two complex numbers |
cmul: | multiply two complex numbers |
cdiv: | divide two complex numbers |
cmov: | copy one complex number to another |
cneg: | negate a complex number |
cpow: | Complex power function |
csin: | Complex circular sine |
csinh: | Complex hyperbolic sine |
csqrt: | Complex square root |
ctan: | Complex circular tangent |
ctanh: | Complex hyperbolic tangent |
をインポートする。
use Math::Cephes qw(:utils);
cbrt: | 立方根 |
ceil: | ceil |
drand: | Pseudorandom number generator |
fabs: | Absolute value |
fac: | Factorial function |
floor: | floor |
frexp: | frexp |
ldexp: | multiplies x by 2**n. |
lrand: | Pseudorandom number generator |
lsqrt: | Integer square root |
pow: | Power function |
powi: | Real raised to integer power |
round: | Round double to nearest or even integer valued double |
sqrt: | 平方根 |
をインポートする。
use Math::Cephes qw(:bessels);
i0: | 修正ベッセル関数 of order zero |
i0e: | 修正ベッセル関数 of order zero, exponentially scaled |
i1: | 修正ベッセル関数 of order one |
i1e: | 修正ベッセル関数 of order one, exponentially scaled |
iv: | 修正ベッセル関数 of noninteger order |
j0: | ベッセル関数 of order zero |
j1: | ベッセル関数 of order one |
jn: | ベッセル関数 of integer order |
jv: | ベッセル関数 of noninteger order |
k0: | 修正ベッセル関数, third kind, order zero |
k0e: | 修正ベッセル関数, third kind, order zero, exponentially scaled |
k1: | 修正ベッセル関数, third kind, order one |
k1e: | 修正ベッセル関数, third kind, order one, exponentially scaled |
kn: | 修正ベッセル関数, third kind, integer order |
y0: | ベッセル関数 of the second kind, order zero |
y1: | ベッセル関数 of second kind of order one |
yn: | ベッセル関数 of second kind of integer order |
yv: | ベッセル関数 Yv with noninteger v |
をインポートする。
use Math::Cephes qw(:dists);
bdtr: | 二項分布 |
bdtrc: | Complemented binomial 分布 |
bdtri: | Inverse binomial 分布 |
btdtr: | Beta 分布 |
chdtr: | Chi-square 分布 |
chdtrc: | Complemented Chi-square 分布 |
chdtri: | Inverse of complemented Chi-square 分布 |
fdtr: | F 分布 |
fdtrc: | Complemented F 分布 |
fdtri: | Inverse of complemented F 分布 |
gdtr: | Gamma 分布 function |
gdtrc: | Complemented gamma 分布 function |
nbdtr: | Negative binomial 分布 |
nbdtrc: | Complemented negative binomial 分布 |
nbdtri: | Functional inverse of negative binomial 分布 |
ndtr: | Normal 分布 function |
ndtri: | Inverse of Normal 分布 function |
pdtr: | Poisson 分布 |
pdtrc: | Complemented poisson 分布 |
pdtri: | Inverse Poisson 分布 |
stdtr: | Student's t 分布 |
stdtri: | Functional inverse of Student's t 分布 |
をインポートする。
use Math::Cephes qw(:gammas);
fac: | 階乗 |
gamma: | ガンマ関数 |
igam: | 不完全ガンマ積分 |
igamc: | Complemented 不完全ガンマ積分 |
igami: | Inverse of complemented 不完全ガンマ積分 |
psi: | Psi (digamma) function |
rgamma: | Reciprocal ガンマ関数 |
をインポートする。
use Math::Cephes qw(:betas);
beta: | ベータ関数 |
incbet: | 不完全ベータ積分 |
incbi: | 不完全ベータ積分の逆関数 |
lbeta: | |beta| の自然対数 |
をインポートする。
use Math::Cephes qw(:elliptics);
ellie: | 第2種不完全楕円積分 |
ellik: | 第1種不完全楕円積分 |
ellpe: | 第2種完全楕円積分 |
ellpj: | Jacobian 楕円関数 |
ellpk: | 第1種完全楕円積分 |
をインポートする。
use Math::Cephes qw(:hypergeometrics);
hyp2f0: | Gauss 超幾何関数 F |
hyp2f1: | Gauss 超幾何関数 F |
hyperg: | Confluent 超幾何関数 |
onef2: | 超幾何関数 1F2 |
threef0: | 超幾何関数 3F0 |
をインポートする。
use Math::Cephes qw(:misc);
airy: | エアリ関数(Airy function) |
bernum: | ベルヌーイ数 |
dawsn: | Dawson 積分 |
ei: | 指数積分 |
erf: | 誤差関数 |
erfc: | Complementary error function |
expn: | 指数積分 En |
fresnl: | フレネル積分 |
plancki: | プランクの黒体放射公式の積分 |
polylog: | Polylogarithm function |
shichi: | Hyperbolic sine and cosine 積分 |
sici: | Sine and cosine 積分 |
simpson: | Simpson's rule to find an 積分 |
spence: | Dilogarithm |
struve: | シュトルーベ関数(Struve function) |
vecang: | angle between two vectors |
zeta: | Riemann zeta function of two arguments |
zetac: | リーマンのゼータ関数 |
をインポートする。
use Math::Cephes qw(:fract);
new_fract: | 新しい fraction オブジェクトを生成 |
radd: | 2つの分数を足す |
rmul: | 2つの分数をかける |
rsub: | 一方の分数から他方の分数を引く |
rdiv: | 一方の分数を他方の分数で割る |
euclid: | 最大公約数を求める |
をインポートする。
利用可能な関数の説明は以下のようなものである。
acosh: Inverse hyperbolic cosine
概要
# double x, y, acosh(); $y = acosh( $x );
説明
where z = x-1, is used. Otherwise,sqrt(z) * P(z)/Q(z)
acosh(x) = log( x + sqrt( (x-1)(x+1) ).
精度
Relative error: arithmetic domain # trials peak rms DEC 1,3 30000 4.2e-17 1.1e-17 IEEE 1,3 30000 4.6e-16 8.7e-17
エラーメッセージ
message condition value returned acosh domain |x| < 1 NAN
airy: Airy function
概要
# double x, ai, aiprime, bi, biprime; # int airy(); ($flag, $ai, $aiprime, $bi, $biprime) = airy( $x );
説明
y"(x) = xy.
The function returns the two independent solutions Ai, Bi and their first derivatives Ai'(x), Bi'(x).
Evaluation is by power series summation for small x,
by rational minimax approximations for large x.
精度
Arithmetic domain function # trials peak rms IEEE -10, 0 Ai 10000 1.6e-15 2.7e-16 IEEE 0, 10 Ai 10000 2.3e-14* 1.8e-15* IEEE -10, 0 Ai' 10000 4.6e-15 7.6e-16 IEEE 0, 10 Ai' 10000 1.8e-14* 1.5e-15* IEEE -10, 10 Bi 30000 4.2e-15 5.3e-16 IEEE -10, 10 Bi' 30000 4.9e-15 7.3e-16 DEC -10, 0 Ai 5000 1.7e-16 2.8e-17 DEC 0, 10 Ai 5000 2.1e-15* 1.7e-16* DEC -10, 0 Ai' 5000 4.7e-16 7.8e-17 DEC 0, 10 Ai' 12000 1.8e-15* 1.5e-16* DEC -10, 10 Bi 10000 5.5e-16 6.8e-17 DEC -10, 10 Bi' 7000 5.3e-16 8.7e-17
radian: Degrees, minutes, seconds to radians
概要
# double d, m, s, radian(); $r = radian( $d, $m, $s );
説明
hypot: returns the hypotenuse associated with the sides of a right triangle
概要
# double a, b, c, hypot(); $c = hypot( $a, $b );
説明
c = sqrt( a**2 + b**2)
asin: Inverse circular sine
概要
# double x, y, asin(); $y = asin( $x );
説明
asin(x) = pi/2 - 2 asin( sqrt( (1-x)/2 ) ).
精度
Relative error: arithmetic domain # trials peak rms DEC -1, 1 40000 2.6e-17 7.1e-18 IEEE -1, 1 10^6 1.9e-16 5.4e-17
エラーメッセージ
message condition value returned asin domain |x| > 1 NAN
acos: Inverse circular cosine
概要
# double x, y, acos(); $y = acos( $x );
説明
or if x > +0.5,acos(x) = pi - 2.0 * asin( sqrt((1+x)/2) );
acos(x) = 2.0 * asin( sqrt((1-x)/2) ).
精度
Relative error: arithmetic domain # trials peak rms DEC -1, 1 50000 3.3e-17 8.2e-18 IEEE -1, 1 10^6 2.2e-16 6.5e-17
エラーメッセージ
message condition value returned asin domain |x| > 1 NAN
asinh: Inverse hyperbolic sine
概要
# double x, y, asinh(); $y = asinh( $x );
説明
asinh(x) = log( x + sqrt(1 + x*x) ).
精度
Relative error: arithmetic domain # trials peak rms DEC -3,3 75000 4.6e-17 1.1e-17 IEEE -1,1 30000 3.7e-16 7.8e-17 IEEE 1,3 30000 2.5e-16 6.7e-17
atan: Inverse circular tangent (arctangent)
概要
# double x, y, atan(); $y = atan( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC -10, 10 50000 2.4e-17 8.3e-18 IEEE -10, 10 10^6 1.8e-16 5.0e-17
atan2: Quadrant correct inverse circular tangent
概要
# double x, y, z, atan2(); $z = atan2( $y, $x );
説明
精度
See atan.c.Relative error: arithmetic domain # trials peak rms IEEE -10, 10 10^6 2.5e-16 6.9e-17
atanh: Inverse hyperbolic tangent
概要
# double x, y, atanh(); $y = atanh( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC -1,1 50000 2.4e-17 6.4e-18 IEEE -1,1 30000 1.9e-16 5.2e-17
bdtr: Binomial 分布
概要
# int k, n; # double p, y, bdtr(); $y = bdtr( $k, $n, $p );
説明
The terms are not summed directly; instead the 不完全 beta 積分 is employed, according to the formulak -- ( n ) j n-j > ( ) p (1-p) -- ( j ) j=0
The arguments must be positive, with p ranging from 0 to 1.y = bdtr( k, n, p ) = incbet( n-k, k+1, 1-p ).
精度
See also incbet.c.a,b Relative error: arithmetic domain # trials peak rms For p between 0.001 and 1: IEEE 0,100 100000 4.3e-15 2.6e-16
エラーメッセージ
message condition value returned bdtr domain k < 0 0.0 n < k x < 0, x > 1
bdtrc: Complemented binomial 分布
概要
# int k, n; # double p, y, bdtrc(); $y = bdtrc( $k, $n, $p );
説明
The terms are not summed directly; instead the 不完全 beta 積分 is employed, according to the formulan -- ( n ) j n-j > ( ) p (1-p) -- ( j ) j=k+1
The arguments must be positive, with p ranging from 0 to 1.y = bdtrc( k, n, p ) = incbet( k+1, n-k, p ).
精度
For p between 0.001 and 1:a,b Relative error: arithmetic domain # trials peak rms
For p between 0 and .001:IEEE 0,100 100000 6.7e-15 8.2e-16
IEEE 0,100 100000 1.5e-13 2.7e-15
エラーメッセージ
message condition value returned bdtrc domain x<0, x>1, n
bdtri: Inverse binomial 分布
概要
# int k, n; # double p, y, bdtri(); $p = bdtr( $k, $n, $y );
説明
1 - p = incbi( n-k, k+1, y ).
精度
For p between 0.001 and 1:a,b Relative error: arithmetic domain # trials peak rms
For p between 10^-6 and 0.001:IEEE 0,100 100000 2.3e-14 6.4e-16 IEEE 0,10000 100000 6.6e-12 1.2e-13
See also incbi.c.IEEE 0,100 100000 2.0e-12 1.3e-14 IEEE 0,10000 100000 1.5e-12 3.2e-14
エラーメッセージ
message condition value returned bdtri domain k < 0, n <= k 0.0 x < 0, x > 1
beta: Beta function
概要
# double a, b, y, beta(); $y = beta( $a, $b );
説明
For large arguments the logarithm of the function is evaluated using lgam(), then exponentiated.- - | (a) | (b) beta( a, b ) = -----------. - | (a+b)
精度
Relative error: arithmetic domain # trials peak rms DEC 0,30 1700 7.7e-15 1.5e-15 IEEE 0,30 30000 8.1e-14 1.1e-14
エラーメッセージ
message condition value returned beta overflow log(beta) > MAXLOG 0.0 a or b <0 integer 0.0
lbeta: Natural logarithm of |beta|
概要
# double a, b; # double lbeta( a, b ); $y = lbeta( $a, $b);
btdtr: Beta 分布
概要
# double a, b, x, y, btdtr(); $y = btdtr( $a, $b, $x );
説明
This function is identical to the 不完全 beta 積分 function incbet(a, b, x). The complemented function isx - - | (a+b) | | a-1 b-1 P(x) = ---------- | t (1-t) dt - - | | | (a) | (b) - 0
1 - P(1-x) = incbet( b, a, x );
精度
cbrt: Cube root
概要
# double x, y, cbrt(); $y = cbrt( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC -10,10 200000 1.8e-17 6.2e-18 IEEE 0,1e308 30000 1.5e-16 5.0e-17
chdtr: Chi-square 分布
概要
# double v, x, y, chdtr(); $y = chdtr( $v, $x );
説明
where x is the Chi-square variable. The 不完全 gamma 積分 is used, according to the formulainf. - 1 | | v/2-1 -t/2 P( x | v ) = ----------- | t e dt v/2 - | | 2 | (v/2) - x
The arguments must both be positive.y = chdtr( v, x ) = igam( v/2.0, x/2.0 ).
精度
エラーメッセージ
message condition value returned chdtr domain x < 0 or v < 1 0.0
chdtrc: Complemented Chi-square 分布
概要
# double v, x, y, chdtrc(); $y = chdtrc( $v, $x );
説明
where x is the Chi-square variable. The 不完全 gamma 積分 is used, according to the formulainf. - 1 | | v/2-1 -t/2 P( x | v ) = ----------- | t e dt v/2 - | | 2 | (v/2) - x
The arguments must both be positive.y = chdtrc( v, x ) = igamc( v/2.0, x/2.0 ).
精度
エラーメッセージ
message condition value returned chdtrc domain x < 0 or v < 1 0.0
chdtri: Inverse of complemented Chi-square 分布
概要
# double df, x, y, chdtri(); $x = chdtri( $df, $y );
説明
x/2 = igami( df/2, y );
精度
エラーメッセージ
message condition value returned chdtri domain y < 0 or y > 1 0.0 v < 1
clog: Complex natural logarithm SYNOPSIS:
# void clog(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); clog($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
The arctangent ranges from -PI to +PI.w = log(r) + i arctan(y/x).
精度
Larger relative error can be observed for z near 1 +i0. In IEEE arithmetic the peak absolute error is 5.2e-16, rms absolute error 1.0e-16.Relative error: arithmetic domain # trials peak rms DEC -10,+10 7000 8.5e-17 1.9e-17 IEEE -10,+10 30000 5.0e-15 1.1e-16
cexp: Complex exponential function
概要
# void cexp(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); cexp($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
thenz = x + iy, r = exp(x),
w = r cos y + i r sin y.
精度
Relative error: arithmetic domain # trials peak rms DEC -10,+10 8700 3.7e-17 1.1e-17 IEEE -10,+10 30000 3.0e-16 8.7e-17
csin: Complex circular sine
概要
# void csin(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); csin($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
thenz = x + iy,
w = sin x cosh y + i cos x sinh y.
精度
Also tested by csin(casin(z)) = z.Relative error: arithmetic domain # trials peak rms DEC -10,+10 8400 5.3e-17 1.3e-17 IEEE -10,+10 30000 3.8e-16 1.0e-16
ccos: Complex circular cosine
概要
# void ccos(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); ccos($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
thenz = x + iy,
w = cos x cosh y - i sin x sinh y.
精度
Relative error: arithmetic domain # trials peak rms DEC -10,+10 8400 4.5e-17 1.3e-17 IEEE -10,+10 30000 3.8e-16 1.0e-16
ctan: Complex circular tangent
概要
# void ctan(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); ctan($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
thenz = x + iy,
On the real axis the denominator is zero at odd multiples of PI/2. The denominator is evaluated by its Taylor series near these points.sin 2x + i sinh 2y w = --------------------. cos 2x + cosh 2y
精度
Also tested by ctan * ccot = 1 and catan(ctan(z)) = z.Relative error: arithmetic domain # trials peak rms DEC -10,+10 5200 7.1e-17 1.6e-17 IEEE -10,+10 30000 7.2e-16 1.2e-16
ccot: Complex circular cotangent
概要
# void ccot(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); ccot($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
thenz = x + iy,
On the real axis, the denominator has zeros at even multiples of PI/2. Near these points it is evaluated by a Taylor series.sin 2x - i sinh 2y w = --------------------. cosh 2y - cos 2x
精度
Also tested by ctan * ccot = 1 + i0.Relative error: arithmetic domain # trials peak rms DEC -10,+10 3000 6.5e-17 1.6e-17 IEEE -10,+10 30000 9.2e-16 1.2e-16
casin: Complex circular arc sine
概要
# void casin(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); casin($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
2 w = -i clog( iz + csqrt( 1 - z ) ).
精度
Larger relative error can be observed for z near zero. Also tested by csin(casin(z)) = z.Relative error: arithmetic domain # trials peak rms DEC -10,+10 10100 2.1e-15 3.4e-16 IEEE -10,+10 30000 2.2e-14 2.7e-15
cacos: Complex circular arc cosine
概要
# void cacos(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); cacos($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
w = arccos z = PI/2 - arcsin z.
精度
Relative error: arithmetic domain # trials peak rms DEC -10,+10 5200 1.6e-15 2.8e-16 IEEE -10,+10 30000 1.8e-14 2.2e-15
catan: Complex circular arc tangent
概要
# void catan(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); catan($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
thenz = x + iy,
Where k is an arbitrary integer.1 ( 2x ) Re w = - arctan(-----------) + k PI 2 ( 2 2) (1 - x - y ) ( 2 2) 1 (x + (y+1) ) Im w = - log(------------) 4 ( 2 2) (x + (y-1) )
精度
The check catan( ctan(z) ) = z, with |x| and |y| < PI/2, had peak relative error 1.5e-16, rms relative error 2.9e-17. See also clog().Relative error: arithmetic domain # trials peak rms DEC -10,+10 5900 1.3e-16 7.8e-18 IEEE -10,+10 30000 2.3e-15 8.5e-17
csinh: Complex hyperbolic sine
概要
# void csinh(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); csinh($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
csinh z = (cexp(z) - cexp(-z))/2 = sinh x * cos y + i cosh x * sin y .
精度
Relative error: arithmetic domain # trials peak rms IEEE -10,+10 30000 3.1e-16 8.2e-17
casinh: Complex inverse hyperbolic sine
概要
# void casinh(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); casinh($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w print_new_cmplx($w); # prints $w as Re($w) + i Im($w)
説明
casinh z = -i casin iz .
精度
Relative error: arithmetic domain # trials peak rms IEEE -10,+10 30000 1.8e-14 2.6e-15
ccosh: Complex hyperbolic cosine
概要
# void ccosh(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); ccosh($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
ccosh(z) = cosh x cos y + i sinh x sin y .
精度
Relative error: arithmetic domain # trials peak rms IEEE -10,+10 30000 2.9e-16 8.1e-17
cacosh: Complex inverse hyperbolic cosine
概要
# void cacosh(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); cacosh($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
acosh z = i acos z .
精度
Relative error: arithmetic domain # trials peak rms IEEE -10,+10 30000 1.6e-14 2.1e-15
ctanh: Complex hyperbolic tangent
概要
# void ctanh(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); ctanh($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
tanh z = (sinh 2x + i sin 2y) / (cosh 2x + cos 2y) .
精度
Relative error: arithmetic domain # trials peak rms IEEE -10,+10 30000 1.7e-14 2.4e-16
catanh: Complex inverse hyperbolic tangent
概要
# void catanh(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); catanh($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
精度
Relative error: arithmetic domain # trials peak rms IEEE -10,+10 30000 2.3e-16 6.2e-17
cpow: Complex power function
概要
# void cpow(); # cmplx a, z, w; $a = new_cmplx(5, 6); # $z = 5 + 6 i $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); cpow($a, $z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
精度
Relative error: arithmetic domain # trials peak rms IEEE -10,+10 30000 9.4e-15 1.5e-15
cmplx: Complex number arithmetic
概要
# typedef struct { # double r; real part # double i; imaginary part # }cmplx; # cmplx *a, *b, *c; $a = new_cmplx(3, 5); # $a = 3 + 5 i $b = new_cmplx(2, 3); # $b = 2 + 3 i $c = new_cmplx(); cadd( $a, $b, $c ); # c = b + a csub( $a, $b, $c ); # c = b - a cmul( $a, $b, $c ); # c = b * a cdiv( $a, $b, $c ); # c = b / a cneg( $c ); # c = -c cmov( $b, $c ); # c = b print $c->{r}, ' ', $c->{i}; # prints real and imaginary parts of $c
説明
Subtraction:c.r = b.r + a.r c.i = b.i + a.i
Multiplication:c.r = b.r - a.r c.i = b.i - a.i
Division:c.r = b.r * a.r - b.i * a.i c.i = b.r * a.i + b.i * a.r
d = a.r * a.r + a.i * a.i c.r = (b.r * a.r + b.i * a.i)/d c.i = (b.i * a.r - b.r * a.i)/d
精度
Relative error: arithmetic function # trials peak rms DEC cadd 10000 1.4e-17 3.4e-18 IEEE cadd 100000 1.1e-16 2.7e-17 DEC csub 10000 1.4e-17 4.5e-18 IEEE csub 100000 1.1e-16 3.4e-17 DEC cmul 3000 2.3e-17 8.7e-18 IEEE cmul 100000 2.1e-16 6.9e-17 DEC cdiv 18000 4.9e-17 1.3e-17 IEEE cdiv 100000 3.7e-16 1.1e-16
cabs: Complex absolute value
概要
# double a, cabs(); # cmplx z; $z = new_cmplx(2, 3); # $z = 2 + 3 i $a = cabs( $z );
説明
Overflow and underflow are avoided by testing the magnitudes of x and y before squaring. If either is outside half of the floating point full scale range, both are rescaled.a = sqrt( x**2 + y**2 ).
精度
Relative error: arithmetic domain # trials peak rms DEC -30,+30 30000 3.2e-17 9.2e-18 IEEE -10,+10 100000 2.7e-16 6.9e-17
csqrt: Complex square root
概要
# void csqrt(); # cmplx z, w; $z = new_cmplx(2, 3); # $z = 2 + 3 i $w = new_cmplx(); csqrt($z, $w ); print $w->{r}, ' ', $w->{i}; # prints real and imaginary parts of $w
説明
Note that -w is also a square root of z. The root chosen is always in the upper half plane. Because of the potential for cancellation error in r - x, the result is sharpened by doing a Heron iteration (see sqrt.c) in complex arithmetic.1/2 Im w = [ (r - x)/2 ] , Re w = y / 2 Im w.
精度
2 Also tested by csqrt( z ) = z, and tested by arguments close to the real axis.Relative error: arithmetic domain # trials peak rms DEC -10,+10 25000 3.2e-17 9.6e-18 IEEE -10,+10 100000 3.2e-16 7.7e-17
machconst: Globally declared constants
概要
説明
For IEEE arithmetic (IBMPC):MACHEP = 1.38777878078144567553E-17 2**-56 MAXLOG = 8.8029691931113054295988E1 log(2**127) MINLOG = -8.872283911167299960540E1 log(2**-128) MAXNUM = 1.701411834604692317316873e38 2**127
These lists are subject to change.MACHEP = 1.11022302462515654042E-16 2**-53 MAXLOG = 7.09782712893383996843E2 log(2**1024) MINLOG = -7.08396418532264106224E2 log(2**-1022) MAXNUM = 1.7976931348623158E308 2**1024
cosh: Hyperbolic cosine
概要
# double x, y, cosh(); $y = cosh( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC +- 88 50000 4.0e-17 7.7e-18 IEEE +-MAXLOG 30000 2.6e-16 5.7e-17
エラーメッセージ
message condition value returned cosh overflow |x| > MAXLOG MAXNUM
dawsn: Dawson's 積分
概要
# double x, y, dawsn(); $y = dawsn( $x );
説明
Three different rational approximations are employed, for the intervals 0 to 3.25; 3.25 to 6.25; and 6.25 up.x - 2 | | 2 dawsn(x) = exp( -x ) | exp( t ) dt | | - 0
精度
Relative error: arithmetic domain # trials peak rms IEEE 0,10 10000 6.9e-16 1.0e-16 DEC 0,10 6000 7.4e-17 1.4e-17
drand: Pseudorandom number generator
概要
# double y, drand(); ($flag, $y) = drand( );
説明
ellie: 不完全 elliptic 積分 of the second kind
概要
# double phi, m, y, ellie(); $y = ellie( $phi, $m );
説明
of amplitude phi and modulus m, using the arithmetic - geometric mean algorithm.phi - | | | 2 E(phi_\m) = | sqrt( 1 - m sin t ) dt | | | - 0
精度
Relative error: arithmetic domain # trials peak rms DEC 0,2 2000 1.9e-16 3.4e-17 IEEE -10,10 150000 3.3e-15 1.4e-16
ellik: 不完全 elliptic 積分 of the first kind
概要
# double phi, m, y, ellik(); $y = ellik( $phi, $m );
説明
of amplitude phi and modulus m, using the arithmetic - geometric mean algorithm.phi - | | | dt F(phi_\m) = | ------------------ | 2 | | sqrt( 1 - m sin t ) - 0
精度
Relative error: arithmetic domain # trials peak rms IEEE -10,10 200000 7.4e-16 1.0e-16
ellpe: Complete elliptic 積分 of the second kind
概要
# double m1, y, ellpe(); $y = ellpe( $m1 );
説明
Where m = 1 - m1, using the approximationpi/2 - | | 2 E(m) = | sqrt( 1 - m sin t ) dt | | - 0
Though there are no singularities, the argument m1 is used rather than m for compatibility with ellpk().P(x) - x log x Q(x).
E(1) = 1; E(0) = pi/2.
精度
Relative error: arithmetic domain # trials peak rms DEC 0, 1 13000 3.1e-17 9.4e-18 IEEE 0, 1 10000 2.1e-16 7.3e-17
エラーメッセージ
message condition value returned ellpe domain x<0, x>1 0.0
ellpj: Jacobian Elliptic Functions
概要
# double u, m, sn, cn, dn, phi; # int ellpj(); ($flag, $sn, $cn, $dn, $phi) = ellpj( $u, $m );
説明
精度
Peak error observed in consistency check using addition theorem for sn(u+v) was 4e-16 (absolute). Also tested by the above relation to the 不完全 elliptic 積分. Accuracy deteriorates when u is large.Absolute error (* = relative error): arithmetic function # trials peak rms DEC sn 1800 4.5e-16 8.7e-17 IEEE phi 10000 9.2e-16* 1.4e-16* IEEE sn 50000 4.1e-15 4.6e-16 IEEE cn 40000 3.6e-15 4.4e-16 IEEE dn 10000 1.3e-12 1.8e-14
ellpk: Complete elliptic 積分 of the first kind
概要
# double m1, y, ellpk(); $y = ellpk( $m1 );
説明
where m = 1 - m1, using the approximationpi/2 - | | | dt K(m) = | ------------------ | 2 | | sqrt( 1 - m sin t ) - 0
The argument m1 is used rather than m so that the logarithmic singularity at m = 1 will be shifted to the origin; this preserves maximum accuracy.P(x) - log x Q(x).
K(0) = pi/2.
精度
Relative error: arithmetic domain # trials peak rms DEC 0,1 16000 3.5e-17 1.1e-17 IEEE 0,1 30000 2.5e-16 6.8e-17
エラーメッセージ
message condition value returned ellpk domain x<0, x>1 0.0
euclid: Rational arithmetic routines
概要
Arguments of the routines are pointers to the structures. The double precision numbers are assumed, without checking, to be integer valued. Overflow conditions are reported.# typedef struct # { # double n; numerator # double d; denominator # }fract; $a = new_fract(3, 4); # a = 3 / 4 $b = new_fract(2, 3); # b = 2 / 3 $c = new_fract(); radd( $a, $b, $c ); # c = b + a rsub( $a, $b, $c ); # c = b - a rmul( $a, $b, $c ); # c = b * a rdiv( $a, $b, $c ); # c = b / a print $c->{n}, ' ', $c->{d}; # prints numerator and denominator of $c ($gcd, $m_reduced, $n_reduced) = euclid($m, $n); # returns the greatest common divisor of $m and $n, as well as # the result of reducing $m and $n by $gcd
exp: Exponential function
概要
# double x, y, exp(); $y = exp( $x );
説明
A Pade' form 1 + 2x P(x**2)/( Q(x**2) - P(x**2) ) of degree 2/3 is used to approximate exp(f) in the basic interval [-0.5, 0.5].x k f e = 2 e.
精度
Error amplification in the exponential function can be a serious matter. The error propagation involves exp( X(1+delta) ) = exp(X) ( 1 + X*delta + ... ), which shows that a 1 lsb error in representing X produces a relative error of X times 1 lsb in the function. While the routine gives an accurate result for arguments that are exactly represented by a double precision computer number, the result contains amplified roundoff error for large arguments not exactly represented.Relative error: arithmetic domain # trials peak rms DEC +- 88 50000 2.8e-17 7.0e-18 IEEE +- 708 40000 2.0e-16 5.6e-17
エラーメッセージ
message condition value returned exp underflow x < MINLOG 0.0 exp overflow x > MAXLOG INFINITY
expxx: exp(x*x)
# double x, y, expxx(); # int sign; $y = expxx( $x, $sign );
説明
精度
Relative error: arithmetic domain # trials peak rms IEEE -26.6, 26.6 10^7 3.9e-16 8.9e-17
exp10: Base 10 exponential function (Common antilogarithm)
概要
# double x, y, exp10(); $y = exp10( $x );
説明
is used to approximate 10**f.1 + 2x P(x**2)/( Q(x**2) - P(x**2) )
精度
Test result from an earlier version (2.1):Relative error: arithmetic domain # trials peak rms IEEE -307,+307 30000 2.2e-16 5.5e-17
DEC -38,+38 70000 3.1e-17 7.0e-18
エラーメッセージ
DEC arithmetic: MAXL10 = 38.230809449325611792. IEEE arithmetic: MAXL10 = 308.2547155599167.message condition value returned exp10 underflow x < -MAXL10 0.0 exp10 overflow x > MAXL10 MAXNUM
exp2: Base 2 exponential function
概要
# double x, y, exp2(); $y = exp2( $x );
説明
approximates 2**x in the basic range [-0.5, 0.5].1 + 2x P(x**2) / (Q(x**2) - x P(x**2) )
精度
See exp.c for comments on error amplification.Relative error: arithmetic domain # trials peak rms IEEE -1022,+1024 30000 1.8e-16 5.4e-17
エラーメッセージ
For DEC arithmetic, MAXL2 = 127. For IEEE arithmetic, MAXL2 = 1024.message condition value returned exp underflow x < -MAXL2 0.0 exp overflow x > MAXL2 MAXNUM
ei: Exponential 積分
概要
#double x, y, ei(); $y = ei( $x );
説明
Not defined for x <= 0. See also expn.c.x - t | | e Ei(x) = -|- --- dt . | | t - -inf
精度
Relative error: arithmetic domain # trials peak rms IEEE 0,100 50000 8.6e-16 1.3e-16
expn: Exponential 積分 En
概要
# int n; # double x, y, expn(); $y = expn( $n, $x );
説明
Both n and x must be nonnegative. The routine employs either a power series, a continued fraction, or an asymptotic formula depending on the relative values of n and x.inf. - | | -xt | e E (x) = | ---- dt. n | n | | t - 1
精度
Relative error: arithmetic domain # trials peak rms DEC 0, 30 5000 2.0e-16 4.6e-17 IEEE 0, 30 10000 1.7e-15 3.6e-16
fabs: Absolute value
概要
# double x, y; $y = fabs( $x );
説明
fac: Factorial function
概要
# double y, fac(); # int i; $y = fac( $i );
説明
精度
Relative error: arithmetic domain peak IEEE 0, 170 1.4e-15 DEC 0, 33 1.4e-17
fdtr: F 分布
概要
# int df1, df2; # double x, y, fdtr(); $y = fdtr( $df1, $df2, $x );
説明
The arguments a and b are greater than zero, and x is nonnegative.P(x) = incbet( df1/2, df2/2, df1*x/(df2 + df1*x) ).
精度
See also incbet.c.x a,b Relative error: arithmetic domain domain # trials peak rms IEEE 0,1 0,100 100000 9.8e-15 1.7e-15 IEEE 1,5 0,100 100000 6.5e-15 3.5e-16 IEEE 0,1 1,10000 100000 2.2e-11 3.3e-12 IEEE 1,5 1,10000 100000 1.1e-11 1.7e-13
エラーメッセージ
message condition value returned fdtr domain a<0, b<0, x<0 0.0
fdtrc: Complemented F 分布
概要
# int df1, df2; # double x, y, fdtrc(); $y = fdtrc( $df1, $df2, $x );
説明
The 不完全 beta 積分 is used, according to the formulainf. - 1 | | a-1 b-1 1-P(x) = ------ | t (1-t) dt B(a,b) | | - x
P(x) = incbet( df2/2, df1/2, df2/(df2 + df1*x) ).
精度
See also incbet.c.x a,b Relative error: arithmetic domain domain # trials peak rms IEEE 0,1 1,100 100000 3.7e-14 5.9e-16 IEEE 1,5 1,100 100000 8.0e-15 1.6e-15 IEEE 0,1 1,10000 100000 1.8e-11 3.5e-13 IEEE 1,5 1,10000 100000 2.0e-11 3.0e-12
エラーメッセージ
message condition value returned fdtrc domain a<0, b<0, x<0 0.0
fdtri: Inverse of complemented F 分布
概要
# int df1, df2; # double x, p, fdtri(); $x = fdtri( $df1, $df2, $p );
説明
Note: the following relations hold for the inverse of the uncomplemented F 分布:z = incbi( df2/2, df1/2, p ) x = df2 (1-z) / (df1 z).
z = incbi( df1/2, df2/2, p ) x = df2 z / (df1 (1-z)).
精度
For p between .001 and 1:a,b Relative error: arithmetic domain # trials peak rms
For p between 10^-6 and 10^-3:IEEE 1,100 100000 8.3e-15 4.7e-16 IEEE 1,10000 100000 2.1e-11 1.4e-13
See also fdtrc.c.IEEE 1,100 50000 1.3e-12 8.4e-15 IEEE 1,10000 50000 3.0e-12 4.8e-14
エラーメッセージ
message condition value returned fdtri domain p <= 0 or p > 1 0.0 v < 1
ceil: ceil
概要
# double x, y, ceil(); $y = ceil( $x );
floor: floor
概要
# double x, y, floor(); $y = floor( $x );
frexp: frexp
概要
# double x, y, frexp(); # int expnt; ($y, $expnt) = frexp( $x );
ldexp: multiplies x by 2**n.
概要
# double x, y, ldexp(); # int n; $y = ldexp( $x, $n );
fresnl: Fresnel 積分
概要
# double x, S, C; # void fresnl(); ($flag, $S, $C) = fresnl( $x );
説明
The 積分s are evaluated by a power series for x < 1. For x >= 1 auxiliary functions f(x) and g(x) are employed such thatx - | | C(x) = | cos(pi/2 t**2) dt, | | - 0 x - | | S(x) = | sin(pi/2 t**2) dt. | | - 0
C(x) = 0.5 + f(x) sin( pi/2 x**2 ) - g(x) cos( pi/2 x**2 ) S(x) = 0.5 - f(x) cos( pi/2 x**2 ) - g(x) sin( pi/2 x**2 )
精度
Arithmetic function domain # trials peak rms IEEE S(x) 0, 10 10000 2.0e-15 3.2e-16 IEEE C(x) 0, 10 10000 1.8e-15 3.3e-16 DEC S(x) 0, 10 6000 2.2e-16 3.9e-17 DEC C(x) 0, 10 5000 2.3e-16 3.9e-17
gamma: Gamma function
概要
# double x, y, gamma(); # extern int sgngam; $y = gamma( $x );
説明
精度
Error for arguments outside the test range will be larger owing to error amplification by the exponential function.Relative error: arithmetic domain # trials peak rms DEC -34, 34 10000 1.3e-16 2.5e-17 IEEE -170,-33 20000 2.3e-15 3.3e-16 IEEE -33, 33 20000 9.4e-16 2.2e-16 IEEE 33, 171.6 20000 2.3e-15 3.2e-16
lgam: Natural logarithm of gamma function
概要
# double x, y, lgam(); # extern int sgngam; $y = lgam( $x );
説明
精度
The error criterion was relative when the function magnitude was greater than one but absolute when it was less than one. The following test used the relative error criterion, though at certain points the relative error could be much higher than indicated.arithmetic domain # trials peak rms DEC 0, 3 7000 5.2e-17 1.3e-17 DEC 2.718, 2.035e36 5000 3.9e-17 9.9e-18 IEEE 0, 3 28000 5.4e-16 1.1e-16 IEEE 2.718, 2.556e305 40000 3.5e-16 8.3e-17
IEEE -200, -4 10000 4.8e-16 1.3e-16
gdtr: Gamma 分布 function
概要
# double a, b, x, y, gdtr(); $y = gdtr( $a, $b, $x );
説明
The 不完全 gamma 積分 is used, according to the relationx b - a | | b-1 -at y = ----- | t e dt - | | | (b) - 0
y = igam( b, ax ).
精度
エラーメッセージ
message condition value returned gdtr domain x < 0 0.0
gdtrc: Complemented gamma 分布 function
概要
# double a, b, x, y, gdtrc(); $y = gdtrc( $a, $b, $x );
説明
The 不完全 gamma 積分 is used, according to the relationinf. b - a | | b-1 -at y = ----- | t e dt - | | | (b) - x
y = igamc( b, ax ).
精度
エラーメッセージ
message condition value returned gdtrc domain x < 0 0.0
hyp2f0: Gauss hypergeometric function 2F0
概要
# double a, b, x, value, *err; # int type; /* determines what converging factor to use */ ($value, $err) = hyp2f0( $a, $b, $x, $type )
hyp2f1: Gauss hypergeometric function 2F1
概要
# double a, b, c, x, y, hyp2f1(); $y = hyp2f1( $a, $b, $c, $x );
説明
Cases addressed are Tests and escapes for negative integer a, b, or c Linear transformation if c - a or c - b negative integer Special case c = a or c = b Linear transformation for x near +1 Transformation for x < -0.5 Psi function expansion if x > 0.5 and c - a - b integer Conditionally, a recurrence on c to make c-a-b > 0 |x| > 1 is rejected. The parameters a, b, c are considered to be integer valued if they are within 1.0e-14 of the nearest integer (1.0e-13 for IEEE arithmetic).hyp2f1( a, b, c, x ) = F ( a, b; c; x ) 2 1 inf. - a(a+1)...(a+k) b(b+1)...(b+k) k+1 = 1 + > ----------------------------- x . - c(c+1)...(c+k) (k+1)! k = 0
精度
Several special cases also tested with a, b, c in the range -7 to 7.Relative error (-1 < x < 1): arithmetic domain # trials peak rms IEEE -1,7 230000 1.2e-11 5.2e-14
エラーメッセージ
hyperg: Confluent hypergeometric function
概要
# double a, b, x, y, hyperg(); $y = hyperg( $a, $b, $x );
説明
Many higher transcendental functions are special cases of this power series. As is evident from the formula, b must not be a negative integer or zero unless a is an integer with 0 >= a > b. The routine attempts both a direct summation of the series and an asymptotic expansion. In each case error due to roundoff, cancellation, and nonconvergence is estimated. The result with smaller estimated error is returned.1 2 a x a(a+1) x F ( a,b;x ) = 1 + ---- + --------- + ... 1 1 b 1! b(b+1) 2!
精度
Larger errors can be observed when b is near a negative integer or zero. Certain combinations of arguments yield serious cancellation error in the power series summation and also are not in the region of near convergence of the asymptotic series. An error message is printed if the self-estimated relative error is greater than 1.0e-12.Relative error: arithmetic domain # trials peak rms DEC 0,30 2000 1.2e-15 1.3e-16 IEEE 0,30 30000 1.8e-14 1.1e-15
i0: Modified ベッセル関数 of order zero
概要
# double x, y, i0(); $y = i0( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC 0,30 6000 8.2e-17 1.9e-17 IEEE 0,30 30000 5.8e-16 1.4e-16
i0e: Modified ベッセル関数 of order zero, exponentially scaled
概要
# double x, y, i0e(); $y = i0e( $x );
説明
精度
See i0().Relative error: arithmetic domain # trials peak rms IEEE 0,30 30000 5.4e-16 1.2e-16
i1: Modified ベッセル関数 of order one
概要
# double x, y, i1(); $y = i1( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC 0, 30 3400 1.2e-16 2.3e-17 IEEE 0, 30 30000 1.9e-15 2.1e-16
i1e: Modified ベッセル関数 of order one, exponentially scaled
概要
# double x, y, i1e(); $y = i1e( $x );
説明
精度
See i1().Relative error: arithmetic domain # trials peak rms IEEE 0, 30 30000 2.0e-15 2.0e-16
igam: 不完全 gamma 積分
概要
# double a, x, y, igam(); $y = igam( $a, $x );
説明
In this implementation both arguments must be positive. The 積分 is evaluated by either a power series or continued fraction expansion, depending on the relative values of a and x.x - 1 | | -t a-1 igam(a,x) = ----- | e t dt. - | | | (a) - 0
精度
Relative error: arithmetic domain # trials peak rms IEEE 0,30 200000 3.6e-14 2.9e-15 IEEE 0,100 300000 9.9e-14 1.5e-14
igamc: Complemented 不完全 gamma 積分
概要
# double a, x, y, igamc(); $y = igamc( $a, $x );
説明
In this implementation both arguments must be positive. The 積分 is evaluated by either a power series or continued fraction expansion, depending on the relative values of a and x.igamc(a,x) = 1 - igam(a,x) inf. - 1 | | -t a-1 = ----- | e t dt. - | | | (a) - x
精度
a x Relative error: arithmetic domain domain # trials peak rms IEEE 0.5,100 0,100 200000 1.9e-14 1.7e-15 IEEE 0.01,0.5 0,100 200000 1.4e-13 1.6e-15
igami: Inverse of complemented imcomplete gamma 積分
概要
# double a, x, p, igami(); $x = igami( $a, $p );
説明
Starting with the approximate valueigamc( a, x ) = p.
where3 x = a t
andt = 1 - d - ndtri(p) sqrt(d)
the routine performs up to 10 Newton iterations to find the root of igamc(a,x) - p = 0.d = 1/9a,
精度
a p Relative error: arithmetic domain domain # trials peak rms IEEE 0.5,100 0,0.5 100000 1.0e-14 1.7e-15 IEEE 0.01,0.5 0,0.5 100000 9.0e-14 3.4e-15 IEEE 0.5,10000 0,0.5 20000 2.3e-13 3.8e-14
incbet: 不完全 beta 積分
概要
# double a, b, x, y, incbet(); $y = incbet( $a, $b, $x );
説明
The domain of definition is 0 <= x <= 1. In this implementation a and b are restricted to positive values. The 積分 from x to 1 may be obtained by the symmetry relationx - - | (a+b) | | a-1 b-1 ----------- | t (1-t) dt. - - | | | (a) | (b) - 0
The 積分 is evaluated by a continued fraction expansion or, when b*x is small, by a power series.1 - incbet( a, b, x ) = incbet( b, a, 1-x ).
精度
Outputs smaller than the IEEE gradual underflow threshold were excluded from these statistics.Relative error arithmetic domain # trials peak rms IEEE 0,5 10000 6.9e-15 4.5e-16 IEEE 0,85 250000 2.2e-13 1.7e-14 IEEE 0,1000 30000 5.3e-12 6.3e-13 IEEE 0,10000 250000 9.3e-11 7.1e-12 IEEE 0,100000 10000 8.7e-10 4.8e-11
エラーメッセージ
message condition value returned incbet domain x<0, x>1 0.0 incbet underflow 0.0
incbi: Inverse of imcomplete beta 積分
概要
# double a, b, x, y, incbi(); $x = incbi( $a, $b, $y );
説明
The routine performs interval halving or Newton iterations to find the root of incbet(a,b,x) - y = 0.incbet( a, b, x ) = y .
精度
With a and b constrained to half-integer or integer values:Relative error: x a,b arithmetic domain domain # trials peak rms IEEE 0,1 .5,10000 50000 5.8e-12 1.3e-13 IEEE 0,1 .25,100 100000 1.8e-13 3.9e-15 IEEE 0,1 0,5 50000 1.1e-12 5.5e-15 VAX 0,1 .5,100 25000 3.5e-14 1.1e-15
With a = .5, b constrained to half-integer or integer values:IEEE 0,1 .5,10000 50000 5.8e-12 1.1e-13 IEEE 0,1 .5,100 100000 1.7e-14 7.9e-16
IEEE 0,1 .5,10000 10000 8.3e-11 1.0e-11
iv: Modified ベッセル関数 of noninteger order
概要
# double v, x, y, iv(); $y = iv( $v, $x );
説明
精度
Accuracy is diminished if v is near a negative integer. See also hyperg.c.Relative error: arithmetic domain # trials peak rms DEC 0,30 2000 3.1e-15 5.4e-16 IEEE 0,30 10000 1.7e-14 2.7e-15
j0: ベッセル関数 of order zero
概要
# double x, y, j0(); $y = j0( $x );
説明
2 where w = x and the two r's are zeros of the function. In the second interval, the Hankel asymptotic expansion is employed with two rational functions of degree 6/6 and 7/7.2 2 (w - r ) (w - r ) P (w) / Q (w) 1 2 3 8
精度
Absolute error: arithmetic domain # trials peak rms DEC 0, 30 10000 4.4e-17 6.3e-18 IEEE 0, 30 60000 4.2e-16 1.1e-16
y0: ベッセル関数 of the second kind, order zero
概要
# double x, y, y0(); $y = y0( $x );
説明
Thus a call to j0() is required. In the second interval, the Hankel asymptotic expansion is employed with two rational functions of degree 6/6 and 7/7.y0(x) = R(x) + 2 * log(x) * j0(x) / PI.
精度
arithmetic domain # trials peak rms DEC 0, 30 9400 7.0e-17 7.9e-18 IEEE 0, 30 30000 1.3e-15 1.6e-16
j1: ベッセル関数 of order one
概要
# double x, y, j1(); $y = j1( $x );
説明
精度
Absolute error: arithmetic domain # trials peak rms DEC 0, 30 10000 4.0e-17 1.1e-17 IEEE 0, 30 30000 2.6e-16 1.1e-16
y1: ベッセル関数 of second kind of order one
概要
# double x, y, y1(); $y = y1( $x );
説明
精度
(error criterion relative when |y1| > 1).Absolute error: arithmetic domain # trials peak rms DEC 0, 30 10000 8.6e-17 1.3e-17 IEEE 0, 30 30000 1.0e-15 1.3e-16
jn: ベッセル関数 of integer order
概要
# int n; # double x, y, jn(); $y = jn( $n, $x );
説明
精度
Not suitable for large n or x. Use jv() instead.Absolute error: arithmetic range # trials peak rms DEC 0, 30 5500 6.9e-17 9.3e-18 IEEE 0, 30 5000 4.4e-16 7.9e-17
jv: ベッセル関数 of noninteger order
概要
# double v, x, y, jv(); $y = jv( $v, $x );
説明
精度
Integer v:arithmetic v domain x domain # trials peak rms IEEE 0,125 0,125 100000 4.6e-15 2.2e-16 IEEE -125,0 0,125 40000 5.4e-11 3.7e-13 IEEE 0,500 0,500 20000 4.4e-15 4.0e-16
IEEE -125,125 -125,125 50000 3.5e-15* 1.9e-16*
k0: Modified ベッセル関数, third kind, order zero
概要
# double x, y, k0(); $y = k0( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC 0, 30 3100 1.3e-16 2.1e-17 IEEE 0, 30 30000 1.2e-15 1.6e-16
エラーメッセージ
message condition value returned K0 domain x <= 0 MAXNUM
k0e: Modified ベッセル関数, third kind, order zero, exponentially scaled
概要
# double x, y, k0e(); $y = k0e( $x );
説明
k0e(x) = exp(x) * k0(x).
精度
See k0().Relative error: arithmetic domain # trials peak rms IEEE 0, 30 30000 1.4e-15 1.4e-16
k1: Modified ベッセル関数, third kind, order one
概要
# double x, y, k1(); $y = k1( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC 0, 30 3300 8.9e-17 2.2e-17 IEEE 0, 30 30000 1.2e-15 1.6e-16
エラーメッセージ
message condition value returned k1 domain x <= 0 MAXNUM
k1e: Modified ベッセル関数, third kind, order one, exponentially scaled
概要
# double x, y, k1e(); $y = k1e( $x );
説明
k1e(x) = exp(x) * k1(x).
精度
See k1().Relative error: arithmetic domain # trials peak rms IEEE 0, 30 30000 7.8e-16 1.2e-16
kn: Modified ベッセル関数, third kind, integer order
概要
# double x, y, kn(); # int n; $y = kn( $n, $x );
説明
精度
Error is high only near the crossover point x = 9.55 between the two expansions used.Relative error: arithmetic domain # trials peak rms DEC 0,30 3000 1.3e-9 5.8e-11 IEEE 0,30 90000 1.8e-8 3.0e-10
log: Natural logarithm
概要
# double x, y, log(); $y = log( $x );
説明
Otherwise, setting z = 2(x-1)/x+1),log(1+x) = x - 0.5 x**2 + x**3 P(x)/Q(x).
log(x) = z + z**3 P(z)/Q(z).
精度
In the tests over the interval [+-MAXNUM], the logarithms of the random arguments were uniformly distributed over [0, MAXLOG].Relative error: arithmetic domain # trials peak rms IEEE 0.5, 2.0 150000 1.44e-16 5.06e-17 IEEE +-MAXNUM 30000 1.20e-16 4.78e-17 DEC 0, 10 170000 1.8e-17 6.3e-18
エラーメッセージ
log singularity: x = 0; returns -INFINITY log domain: x < 0; returns NAN
log10: Common logarithm
概要
# double x, y, log10(); $y = log10( $x );
説明
log(1+x) = x - 0.5 x**2 + x**3 P(x)/Q(x).
精度
In the tests over the interval [1, MAXNUM], the logarithms of the random arguments were uniformly distributed over [0, MAXLOG].Relative error: arithmetic domain # trials peak rms IEEE 0.5, 2.0 30000 1.5e-16 5.0e-17 IEEE 0, MAXNUM 30000 1.4e-16 4.8e-17 DEC 1, MAXNUM 50000 2.5e-17 6.0e-18
エラーメッセージ
log10 singularity: x = 0; returns -INFINITY log10 domain: x < 0; returns NAN
log2: Base 2 logarithm
概要
# double x, y, log2(); $y = log2( $x );
説明
Otherwise, setting z = 2(x-1)/x+1), log(x) = z + z**3 P(z)/Q(z).log(1+x) = x - 0.5 x**2 + x**3 P(x)/Q(x).
精度
In the tests over the interval [exp(+-700)], the logarithms of the random arguments were uniformly distributed.Relative error: arithmetic domain # trials peak rms IEEE 0.5, 2.0 30000 2.0e-16 5.5e-17 IEEE exp(+-700) 40000 1.3e-16 4.6e-17
エラーメッセージ
log2 singularity: x = 0; returns -INFINITY log2 domain: x < 0; returns NAN
lrand: Pseudorandom number generator
概要
long y, lrand(); $y = lrand( );
説明
lsqrt: Integer square root
概要
long x, y; long lsqrt(); $y = lsqrt( $x );
説明
精度
mtherr: Library common error handling routine
概要
char *fctnam; # int code; # int mtherr(); mtherr( $fctnam, $code );
説明
The default version of the file prints the function name, passed to it by the pointer fctnam, followed by the error condition. The display is directed to the standard output device. The routine then returns to the calling program. Users may wish to modify the program to abort by calling exit() under severe error conditions such as domain errors. Since all error conditions pass control to this function, the display may be easily changed, eliminated, or directed to an error logging device. SEE ALSO: mconf.hMnemonic Value Significance DOMAIN 1 argument domain error SING 2 function singularity OVERFLOW 3 overflow range error UNDERFLOW 4 underflow range error TLOSS 5 total loss of precision PLOSS 6 partial loss of precision EDOM 33 Unix domain error code ERANGE 34 Unix range error code
nbdtr: Negative binomial 分布
概要
# int k, n; # double p, y, nbdtr(); $y = nbdtr( $k, $n, $p );
説明
In a sequence of Bernoulli trials, this is the probability that k or fewer failures precede the nth success. The terms are not computed individually; instead the 不完全 beta 積分 is employed, according to the formulak -- ( n+j-1 ) n j > ( ) p (1-p) -- ( j ) j=0
The arguments must be positive, with p ranging from 0 to 1.y = nbdtr( k, n, p ) = incbet( n, k+1, p ).
精度
See also incbet.c.a,b Relative error: arithmetic domain # trials peak rms IEEE 0,100 100000 1.7e-13 8.8e-15
nbdtrc: Complemented negative binomial 分布
概要
# int k, n; # double p, y, nbdtrc(); $y = nbdtrc( $k, $n, $p );
説明
The terms are not computed individually; instead the 不完全 beta 積分 is employed, according to the formulainf -- ( n+j-1 ) n j > ( ) p (1-p) -- ( j ) j=k+1
The arguments must be positive, with p ranging from 0 to 1.y = nbdtrc( k, n, p ) = incbet( k+1, n, 1-p ).
精度
See also incbet.c.a,b Relative error: arithmetic domain # trials peak rms IEEE 0,100 100000 1.7e-13 8.8e-15
nbdtrc: Complemented negative binomial 分布
概要
# int k, n; # double p, y, nbdtrc(); $y = nbdtrc( $k, $n, $p );
説明
The terms are not computed individually; instead the 不完全 beta 積分 is employed, according to the formulainf -- ( n+j-1 ) n j > ( ) p (1-p) -- ( j ) j=k+1
The arguments must be positive, with p ranging from 0 to 1.y = nbdtrc( k, n, p ) = incbet( k+1, n, 1-p ).
精度
nbdtri: Functional inverse of negative binomial 分布
概要
# int k, n; # double p, y, nbdtri(); $p = nbdtri( $k, $n, $y );
説明
精度
See also incbi.c.a,b Relative error: arithmetic domain # trials peak rms IEEE 0,100 100000 1.5e-14 8.5e-16
ndtr: Normal 分布 function
概要
# double x, y, ndtr(); $y = ndtr( $x );
説明
where z = x/sqrt(2). Computation is via the functions erf and erfc.x - 1 | | 2 ndtr(x) = --------- | exp( - t /2 ) dt sqrt(2pi) | | - -inf. = ( 1 + erf(z) ) / 2
精度
エラーメッセージ
message condition value returned erfc underflow x > 37.519379347 0.0
erf: Error function
概要
# double x, y, erf(); $y = erf( $x );
説明
The magnitude of x is limited to 9.231948545 for DEC arithmetic; 1 or -1 is returned outside this range. For 0 <= |x| < 1, erf(x) = x * P4(x**2)/Q5(x**2); otherwise erf(x) = 1 - erfc(x).x - 2 | | 2 erf(x) = -------- | exp( - t ) dt. sqrt(pi) | | - 0
精度
Relative error: arithmetic domain # trials peak rms DEC 0,1 14000 4.7e-17 1.5e-17 IEEE 0,1 30000 3.7e-16 1.0e-16
erfc: Complementary error function
概要
説明
For small x, erfc(x) = 1 - erf(x); otherwise rational approximations are computed.1 - erf(x) = inf. - 2 | | 2 erfc(x) = -------- | exp( - t ) dt sqrt(pi) | | - x
精度
Relative error: arithmetic domain # trials peak rms DEC 0, 9.2319 12000 5.1e-16 1.2e-16 IEEE 0,26.6417 30000 5.7e-14 1.5e-14
エラーメッセージ
message condition value returned erfc underflow x > 9.231948545 (DEC) 0.0
ndtri: Inverse of Normal 分布 function
概要
# double x, y, ndtri(); $x = ndtri( $y );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC 0.125, 1 5500 9.5e-17 2.1e-17 DEC 6e-39, 0.135 3500 5.7e-17 1.3e-17 IEEE 0.125, 1 20000 7.2e-16 1.3e-16 IEEE 3e-308, 0.135 50000 4.6e-16 9.8e-17
エラーメッセージ
message condition value returned ndtri domain x <= 0 -MAXNUM ndtri domain x >= 1 MAXNUM
pdtr: Poisson 分布
概要
# int k; # double m, y, pdtr(); $y = pdtr( $k, $m );
説明
The terms are not summed directly; instead the 不完全 gamma 積分 is employed, according to the relationk j -- -m m > e -- -- j! j=0
The arguments must both be positive.y = pdtr( k, m ) = igamc( k+1, m ).
精度
pdtrc: Complemented poisson 分布
概要
# int k; # double m, y, pdtrc(); $y = pdtrc( $k, $m );
説明
The terms are not summed directly; instead the 不完全 gamma 積分 is employed, according to the formulainf. j -- -m m > e -- -- j! j=k+1
The arguments must both be positive.y = pdtrc( k, m ) = igam( k+1, m ).
精度
pdtri: Inverse Poisson 分布
概要
# int k; # double m, y, pdtr(); $m = pdtri( $k, $y );
説明
m = igami( k+1, y ).
精度
エラーメッセージ
message condition value returned pdtri domain y < 0 or y >= 1 0.0 k < 0
pow: Power function
概要
# double x, y, z, pow(); $z = pow( $x, $y );
説明
Following Cody and Waite, this program uses a lookup table of 2**-i/16 and pseudo extended precision arithmetic to obtain an extra three bits of accuracy in both the logarithm and the exponential.x**y = exp( y log(x) ).
精度
1/26 < x < 26, with log(x) uniformly distributed. -26 < y < 26, y uniformly distributed. IEEE 0,8700 30000 1.5e-14 2.1e-15 0.99 < x < 1.01, 0 < y < 8700, uniformly distributed.Relative error: arithmetic domain # trials peak rms IEEE -26,26 30000 4.2e-16 7.7e-17 DEC -26,26 60000 4.8e-17 9.1e-18
エラーメッセージ
message condition value returned pow overflow x**y > MAXNUM INFINITY pow underflow x**y < 1/MAXNUM 0.0 pow domain x<0 and y noninteger 0.0
powi: Real raised to integer power
概要
# double x, y, powi(); # int n; $y = powi( $x, $n );
説明
精度
Returns MAXNUM on overflow, zero on underflow.Relative error: arithmetic x domain n domain # trials peak rms DEC .04,26 -26,26 100000 2.7e-16 4.3e-17 IEEE .04,26 -26,26 50000 2.0e-15 3.8e-16 IEEE 1,2 -1022,1023 50000 8.6e-14 1.6e-14
psi: Psi (digamma) function
概要
# double x, y, psi(); $y = psi( $x );
説明
is the logarithmic derivative of the gamma function. For integer x,d - psi(x) = -- ln | (x) dx
This formula is used for 0 < n <= 10. If x is negative, it is transformed to a positive argument by the reflection formula psi(1-x) = psi(x) + pi cot(pi x). For general positive x, the argument is made greater than 10 using the recurrence psi(x+1) = psi(x) + 1/x. Then the following asymptotic expansion is applied:n-1 - psi(n) = -EUL + > 1/k. - k=1
where the B2k are Bernoulli numbers.inf. B - 2k psi(x) = log(x) - 1/2x - > ------- - 2k k=1 2k x
精度
arithmetic domain # trials peak rms DEC 0,30 2500 1.7e-16 2.0e-17 IEEE 0,30 30000 1.3e-15 1.4e-16 IEEE -30,0 40000 1.5e-15 2.2e-16
エラーメッセージ
message condition value returned psi singularity x integer <=0 MAXNUM
rgamma: Reciprocal gamma function
概要
# double x, y, rgamma(); $y = rgamma( $x );
説明
精度
For arguments less than -34.034 the peak error is on the order of 5e-15 (DEC), excepting overflow or underflow.Relative error: arithmetic domain # trials peak rms DEC -30,+30 4000 1.2e-16 1.8e-17 IEEE -30,+30 30000 1.1e-15 2.0e-16
round: Round double to nearest or even integer valued double
概要
# double x, y, round(); $y = round( $x );
説明
精度
shichi: Hyperbolic sine and cosine 積分s
概要
# double x, Chi, Shi, shichi(); ($flag, $Shi, $Chi) = shichi( $x );
説明
where eul = 0.57721566490153286061 is Euler's constant. The 積分s are evaluated by power series for x < 8 and by Chebyshev expansions for x between 8 and 88. For large x, both functions approach exp(x)/2x. Arguments greater than 88 in magnitude return MAXNUM.x - | | cosh t - 1 Chi(x) = eul + ln x + | ----------- dt, | | t - 0 x - | | sinh t Shi(x) = | ------ dt | | t - 0
精度
Absolute error, except relative when |Chi| > 1:Relative error: arithmetic function # trials peak rms DEC Shi 3000 9.1e-17 IEEE Shi 30000 6.9e-16 1.6e-16
DEC Chi 2500 9.3e-17 IEEE Chi 30000 8.4e-16 1.4e-16
sici: Sine and cosine 積分s
概要
# double x, Ci, Si, sici(); ($flag, $Si, $Ci) = sici( $x );
説明
where eul = 0.57721566490153286061 is Euler's constant. The 積分s are approximated by rational functions. For x > 8 auxiliary functions f(x) and g(x) are employed such thatx - | cos t - 1 Ci(x) = eul + ln x + | --------- dt, | t - 0 x - | sin t Si(x) = | ----- dt | t - 0
Ci(x) = f(x) sin(x) - g(x) cos(x) Si(x) = pi/2 - f(x) cos(x) - g(x) sin(x)
精度
Absolute error, except relative when > 1:Test interval = [0,50].
arithmetic function # trials peak rms IEEE Si 30000 4.4e-16 7.3e-17 IEEE Ci 30000 6.9e-16 5.1e-17 DEC Si 5000 4.4e-17 9.0e-18 DEC Ci 5300 7.9e-17 5.2e-18
sin: Circular sine
概要
# double x, y, sin(); $y = sin( $x );
説明
Between pi/4 and pi/2 the cosine is represented asx + x**3 P(x**2).
1 - x**2 Q(x**2).
精度
Relative error: arithmetic domain # trials peak rms DEC 0, 10 150000 3.0e-17 7.8e-18 IEEE -1.07e9,+1.07e9 130000 2.1e-16 5.4e-17
エラーメッセージ
Partial loss of accuracy begins to occur at x = 2**30 = 1.074e9. The loss is not gradual, but jumps suddenly to about 1 part in 10e7. Results may be meaningless for x > 2**49 = 5.6e14. The routine as implemented flags a TLOSS error for x > 2**30 and returns 0.0.message condition value returned sin total loss x > 1.073741824e9 0.0
cos: Circular cosine
概要
# double x, y, cos(); $y = cos( $x );
説明
Between pi/4 and pi/2 the sine is represented as1 - x**2 Q(x**2).
x + x**3 P(x**2).
精度
Relative error: arithmetic domain # trials peak rms IEEE -1.07e9,+1.07e9 130000 2.1e-16 5.4e-17 DEC 0,+1.07e9 17000 3.0e-17 7.2e-18
sindg: Circular sine of angle in degrees
概要
# double x, y, sindg(); $y = sindg( $x );
説明
Between pi/4 and pi/2 the cosine is represented asx + x**3 P(x**2).
1 - x**2 P(x**2).
精度
Relative error: arithmetic domain # trials peak rms DEC +-1000 3100 3.3e-17 9.0e-18 IEEE +-1000 30000 2.3e-16 5.6e-17
エラーメッセージ
message condition value returned sindg total loss x > 8.0e14 (DEC) 0.0 x > 1.0e14 (IEEE)
cosdg: Circular cosine of angle in degrees
概要
# double x, y, cosdg(); $y = cosdg( $x );
説明
Between pi/4 and pi/2 the sine is represented as1 - x**2 P(x**2).
x + x**3 P(x**2).
精度
See also sin().Relative error: arithmetic domain # trials peak rms DEC +-1000 3400 3.5e-17 9.1e-18 IEEE +-1000 30000 2.1e-16 5.7e-17
sinh: Hyperbolic sine
概要
# double x, y, sinh(); $y = sinh( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC +- 88 50000 4.0e-17 7.7e-18 IEEE +-MAXLOG 30000 2.6e-16 5.7e-17
spence: Dilogarithm
概要
# double x, y, spence(); $y = spence( $x );
説明
for x >= 0. A rational approximation gives the 積分 in the interval (0.5, 1.5). Transformation formulas for 1/x and 1-x are employed outside the basic expansion range.x - | | log t spence(x) = - | ----- dt | | t - 1 - 1
精度
Relative error: arithmetic domain # trials peak rms IEEE 0,4 30000 3.9e-15 5.4e-16 DEC 0,4 3000 2.5e-16 4.5e-17
sqrt: Square root
概要
# double x, y, sqrt(); $y = sqrt( $x );
説明
精度
Relative error: arithmetic domain # trials peak rms DEC 0, 10 60000 2.1e-17 7.9e-18 IEEE 0,1.7e308 30000 1.7e-16 6.3e-17
エラーメッセージ
message condition value returned sqrt domain x < 0 0.0
stdtr: Student's t 分布
概要
# double t, stdtr(); short k; $y = stdtr( $k, $t );
説明
Relation to 不完全 beta 積分:t - | | - | 2 -(k+1)/2 | ( (k+1)/2 ) | ( x ) ---------------------- | ( 1 + --- ) dx - | ( k ) sqrt( k pi ) | ( k/2 ) | | | - -inf.
where1 - stdtr(k,t) = 0.5 * incbet( k/2, 1/2, z )
For t < -2, this is the method of computation. For higher t, a direct method is derived from integration by parts. Since the function is symmetric about t=0, the area under the right tail of the density is found by calling the function with -t instead of t.z = k/(k + t**2).
精度
Relative error: arithmetic domain # trials peak rms IEEE -100,-2 50000 5.9e-15 1.4e-15 IEEE -2,100 500000 2.7e-15 4.9e-17
stdtri: Functional inverse of Student's t 分布
概要
# double p, t, stdtri(); # int k; $t = stdtri( $k, $p );
説明
精度
Relative error: arithmetic domain # trials peak rms IEEE .001,.999 25000 5.7e-15 8.0e-16 IEEE 10^-6,.001 25000 2.0e-12 2.9e-14
struve: Struve function
概要
# double v, x, y, struve(); $y = struve( $v, $x );
説明
精度
plancki: 積分 of Planck's black body radiation formula
概要
# double lambda, T, y, plancki() $y = plancki( $lambda, $T );
説明
Physical constants c1 = 3.7417749e-16 and c2 = 0.01438769 are built in to the function program. They are scaled to provide a result in watts per square meter. Argument T represents temperature in degrees Kelvin; lambda is wavelength in meters. The 積分 is expressed in closed form, in terms of polylogarithms (see polylog.c). The total area under the curve is (-1/8) (42 zeta(4) - 12 pi^2 zeta(2) + pi^4 ) c1 (T/c2)^4 = (pi^4 / 15) c1 (T/c2)^4 = 5.6705032e-8 T^4 where sigma = 5.6705032e-8 W m^2 K^-4 is the Stefan-Boltzmann constant.-5 c1 lambda E = ------------------ c2/(lambda T) e - 1
精度
Relative error. The domain refers to lambda T / c2. arithmetic domain # trials peak rms IEEE 0.1, 10 50000 7.1e-15 5.4e-16
polylog: polylogarithm function
概要
The polylogarithm of order n is defined by the series# double x, y, polylog(); # int n; $y = polylog( $n, $x );
For x = 1,inf k - x Li (x) = > --- . n - n k=1 k
When n = 2, the function is the dilogarithm, related to Spence's 積分:inf - 1 Li (1) = > --- = Riemann zeta function (n) . n - n k=1 k
x 1-x - - | | -ln(1-t) | | ln t Li (x) = | -------- dt = | ------ dt = spence(1-x) . 2 | | t | | 1 - t - - 0 1
精度
Relative error: arithmetic domain n # trials peak rms IEEE 0, 1 2 50000 6.2e-16 8.0e-17 IEEE 0, 1 3 100000 2.5e-16 6.6e-17 IEEE 0, 1 4 30000 1.7e-16 4.9e-17 IEEE 0, 1 5 30000 5.1e-16 7.8e-17
bernum: Bernoulli numbers
概要
($num, $den) = bernum( $n); ($num_array, $den_array) = bernum();
説明
simpson: Simpson's rule to find an 積分
概要
$result = simpson(\&fun, $a, $b, $abs_err, $rel_err, $nmax); sub fun { my $x = shift; return cos($x)*exp($x); }
説明
vecang: angle between two vectors
概要
# double p[3], q[3], vecang(); $y = vecang( $p, $q );
説明
where "." represents inner product, "|x|" the length of vector x. If the angle is small, an expression in sin A is preferred. Set r = q - p. Thenp.q / (|p| |q|) = cos A .
p.q = p.p + p.r , |p|^2 = p.p , |q|^2 = p.p + 2 p.r + r.r , p.p^2 + 2 p.p p.r + p.r^2 cos^2 A = ---------------------------- p.p (p.p + 2 p.r + r.r) p.p + 2 p.r + p.r^2 / p.p = --------------------------- , p.p + 2 p.r + r.r sin^2 A = 1 - cos^2 A r.r - p.r^2 / p.p = -------------------- p.p + 2 p.r + r.r = (r.r - p.r^2 / p.p) / q.q .
精度
Relative error: arithmetic domain # trials peak rms IEEE -1, 1 10^6 1.7e-16 4.2e-17
onef2: Hypergeometric function 1F2
概要
# double a, b, c, x, value; # double *err; ($value, $err) = onef2( $a, $b, $c, $x)
精度
threef0: Hypergeometric function 3F0
概要
# double a, b, c, x, value; # double *err; ($value, $err) = threef0( $a, $b, $c, $x )
精度
yv: ベッセル関数 Yv with noninteger v
概要
# double v, x; # double yv( v, x ); $y = yv( $v, $x );
精度
tan: Circular tangent
概要
# double x, y, tan(); $y = tan( $x );
説明
is employed in the basic interval [0, pi/4].x + x**3 P(x**2)/Q(x**2)
精度
Relative error: arithmetic domain # trials peak rms DEC +-1.07e9 44000 4.1e-17 1.0e-17 IEEE +-1.07e9 30000 2.9e-16 8.1e-17
エラーメッセージ
message condition value returned tan total loss x > 1.073741824e9 0.0
cot: Circular cotangent
概要
# double x, y, cot(); $y = cot( $x );
説明
is employed in the basic interval [0, pi/4].x + x**3 P(x**2)/Q(x**2)
精度
Relative error: arithmetic domain # trials peak rms IEEE +-1.07e9 30000 2.9e-16 8.2e-17
エラーメッセージ
message condition value returned cot total loss x > 1.073741824e9 0.0 cot singularity x = 0 INFINITY
tandg: Circular tangent of argument in degrees
概要
# double x, y, tandg(); $y = tandg( $x );
説明
is employed in the basic interval [0, pi/4].x + x**3 P(x**2)/Q(x**2)
精度
Relative error: arithmetic domain # trials peak rms DEC 0,10 8000 3.4e-17 1.2e-17 IEEE 0,10 30000 3.2e-16 8.4e-17
エラーメッセージ
message condition value returned tandg total loss x > 8.0e14 (DEC) 0.0 x > 1.0e14 (IEEE) tandg singularity x = 180 k + 90 MAXNUM
cotdg: Circular cotangent of argument in degrees
概要
# double x, y, cotdg(); $y = cotdg( $x );
説明
is employed in the basic interval [0, pi/4].x + x**3 P(x**2)/Q(x**2)
エラーメッセージ
message condition value returned cotdg total loss x > 8.0e14 (DEC) 0.0 x > 1.0e14 (IEEE) cotdg singularity x = 180 k MAXNUM
tanh: Hyperbolic tangent
概要
# double x, y, tanh(); $y = tanh( $x );
説明
tanh(x) = sinh(x)/cosh(x) = 1 - 2/(exp(2x) + 1).
精度
Relative error: arithmetic domain # trials peak rms DEC -2,2 50000 3.3e-17 6.4e-18 IEEE -2,2 30000 2.5e-16 5.8e-17
unity: Relative error approximations for function arguments near unity.
概要
# log1p(x) = log(1+x) $y = log1p( $x ); # expm1(x) = exp(x) - 1 $y = expm1( $x ); # cosm1(x) = cos(x) - 1 $y = cosm1( $x );
yn: ベッセル関数 of second kind of integer order
概要
# double x, y, yn(); # int n; $y = yn( $n, $x );
説明
精度
arithmetic domain # trials peak rms DEC 0, 30 2200 2.9e-16 5.3e-17 IEEE 0, 30 30000 3.4e-15 4.3e-16
エラーメッセージ
Spot checked against tables for x, n between 0 and 100.message condition value returned yn singularity x = 0 MAXNUM yn overflow MAXNUM
zeta: Riemann zeta function of two arguments
概要
# double x, q, y, zeta(); $y = zeta( $x, $q );
説明
where x > 1 and q is not a negative integer or zero. The Euler-Maclaurin summation formula is used to obtain the expansioninf. - -x zeta(x,q) = > (k+q) - k=0
where the B2j are Bernoulli numbers. Note that (see zetac.c) zeta(x,1) = zetac(x) + 1.n - -x zeta(x,q) = > (k+q) - k=1 1-x inf. B x(x+1)...(x+2j) (n+q) 1 - 2j + --------- - ------- + > -------------------- x-1 x - x+2j+1 2(n+q) j=1 (2j)! (n+q)
精度
zetac: リーマンのζ関数
概要
# double x, y, zetac(); $y = zetac( $x );
説明
is related to the Riemann zeta function byinf. - -x zetac(x) = > k , x > 1, - k=2
Extension of the function definition for x < 1 is implemented. Zero is returned for x > log2(MAXNUM). An overflow error may occur for large negative x, due to the gamma function in the reflection formula.Riemann zeta(x) = zetac(x) + 1.
精度
Relative error: arithmetic domain # trials peak rms IEEE 1,50 10000 9.8e-16 1.3e-16 DEC 1,50 2000 1.1e-16 1.9e-17
Randy Kobes <randy@theoryx5.uwinnipeg.ca> に知らせてほしい。
数式操作へのプログラムへのインタフェースについては PDL, Math::Pari, Math::ematica を見よ。
Math::Cephes ルーティンへのコマンドラインインタフェースについては pmath スクリプトを見よ。
複素数や分数とのインタフェースについては Math::Cephes::Fraction , Math::Cephes::Complex を見よ。
多項式ルーティンとのインタフェースについては Math::Cephes::Polynomial を、行列ルーティンについては Math::Cephes::Matrix を見よ。
Cephes Math Library の C Code の著作権は Stephen L. Moshier に帰属し、http://www.netlib.org/cephes/ で入手可能である。 (Copyright 1984, 1987, 1989, 2002)
直接の質問は 30 Frost Street, Cambridge, MA 02140 にすること。
C ルーティンとのやりとりのために配列を扱うために含まれた arrays.c は Karl Glazebrook kgb@zzoepp.aao.gov.au の開発した PGPLOT モジュールに由来する。
perl インタフェースについては Randy Kobes に著作権がある。
本ライブラリはフリーソフトウェアであり、 Perl 本体と同等の条件で修正・再配布してもよい。
![]() |
Updated : 2007/11/13 |