D 1.0   D 2.0
About Japanese Translation

Last update Sun Jul 5 01:02:21 2009

std.math

const real E;
e

const real LOG2T;
log210

const real LOG2E;
log2e

const real LOG2;
log102

const real LOG10E;
log10e

const real LN2;
ln 2

const real LN10;
ln 10

const real PI;
π

const real PI_2;
π / 2

const real PI_4;
π / 4

const real M_1_PI;
1 / π

const real M_2_PI;
2 / π

const real M_2_SQRTPI;
2 / √π

const real SQRT2;
√2

const real SQRT1_2;
√½

real abs(real x);
long abs(long x);
int abs(int x);
real abs(creal z);
real abs(ireal y);
絶対値の計算

複素数に関しては、 abs(z) = sqrt( z.re2 + z.im2 ) = hypot(z.re, z.im) です

creal conj(creal z);
ireal conj(ireal y);
共役複素数

conj(x + iy) = x - iy

z * conj(z) = z.re2 - z.im2 は常に実数になります

real cos(real x);
xの余弦を計算します。x はラジアンです。

特殊な値の場合
x cos(x) invalid?
NAN NAN yes
±∞ NAN yes


BUGS:
|x| >= 264 の場合結果は不定です

real sin(real x);
xの正弦を計算します。x はラジアンです。

特殊な値の場合
x sin(x) invalid?
NAN NAN yes
±0.0 ±0.0 no
±∞ NAN yes


BUGS:
|x| >= 264 の場合結果は不定です

creal sin(creal z);
ireal sin(ireal y);
複素数と虚数の正弦

sin(z) = sin(z.re)*cosh(z.im) + cos(z.re)*sinh(z.im)i

sin(θ) と cos(θ) の両方が必要な場合は、 expi(θ) を使う方が効率的です。

creal cos(creal z);
real cos(ireal y);
複素数と虚数の余弦

cos(z) = cos(z.re)*cosh(z.im) - sin(z.re)*sinh(z.im)i

real tan(real x);
xの正接を計算します。x はラジアンです。

特殊な値の場合
x tan(x) invalid?
NAN NAN yes
±0.0 ±0.0 no
±∞ NAN yes


real acos(real x);
x の逆余弦を返します。 返値は 0 から π の間です。

特殊な値の場合
x acos(x) invalid?
>1.0 NAN yes
<-1.0 NAN yes
NAN NAN yes


real asin(real x);
x の逆正弦を返します。 返値は -π/2 から π/2 の間です。

特殊な値の場合
x asin(x) invalid?
±0.0 ±0.0 no
>1.0 NAN yes
<-1.0 NAN yes


real atan(real x);
x の逆正接を返します。 返値は -π/2 から π/2 の間です。

特殊な値の場合
x atan(x) invalid?
±0.0 ±0.0 no
±∞ NAN yes


real atan2(real y, real x);
y / x の逆正接を返します。 返値は -π から π の間です。

特殊な値の場合
y x atan(y, x)
NAN anything NAN
anything NAN NAN
±0.0 >0.0 ±0.0
±0.0 +0.0 ±0.0
±0.0 <0.0 ±π
±0.0 -0.0 ±π
>0.0 ±0.0 π/2
<0.0 ±0.0 -π/2
>0.0 ±0.0
±∞ anything ±π/2
>0.0 -∞ ±π
±∞ ±π/4
±∞ -∞ ±3π/4


real cosh(real x);
x の双曲余弦を返します

特殊な値の場合
x cosh(x) invalid?
±∞ ±0.0 no


real sinh(real x);
x の双曲正弦を返します

特殊な値の場合
x sinh(x) invalid?
±0.0 ±0.0 no
±∞ ±∞ no


real tanh(real x);
x の双曲正接を返します

特殊な値の場合
x tanh(x) invalid?
±0.0 ±0.0 no
±∞ ±1.0 no


real acosh(real x);
x の逆双曲余弦を返します

数学的には acosh(x) = log(x + sqrt( x*x - 1))

特殊な値の場合
x acosh(x)
NAN NAN
<1 NAN
1 0
+∞ +∞


real asinh(real x);
x の逆双曲正弦を返します

数学的には
  asinh(x) =  log( x + sqrt( x*x + 1 )) // if x >= +0
  asinh(x) = -log(-x + sqrt( x*x + 1 )) // if x <= -0
特殊な値の場合
x asinh(x)
NAN NAN
±0 ±0
±∞ ±∞


real atanh(real x);
x の逆双曲正接を返します 返値は -1 から 1 の間です

数学的には atanh(x) = log( (1+x)/(1-x) ) / 2



特殊な値の場合
x acosh(x)
NAN NAN
±0 ±0
-∞ -0


long rndtol(real x);
現在の丸めモードに従って、x をlong型の値へと丸めます。 x の整数値が long.max より大きい場合、 結果は不定になります。

real rndtonl(real x);
FE_TONEAREST丸めモードで、x をlong型の値へと丸めます。 x の整数値が long.max より大きい場合、 結果は不定になります。

float sqrt(float x);
double sqrt(double x);
real sqrt(real x);
x の平方根を計算します

特殊な値の場合
x sqrt(x) invalid?
-0.0 -0.0 no
<0.0 NAN yes
+∞ +∞ no


real exp(real x);
ex を計算します

特殊な値の場合
x ex
+∞ +∞
-∞ +0.0

NAN NAN
real expm1(real x);
自然対数の底 (e) の x 乗、引く1 を計算します

非常に小さな x については、expm1(x) の方が exp(x)-1 よりも正確です

特殊な値の場合
x ex-1
±0.0 ±0.0
+∞ +∞
-∞ -1.0

NAN NAN

real exp2(real x);
2x を計算します
特殊な値の場合
x exp2(x) +∞ +∞
-∞ +0.0
NAN NAN

creal expi(real y);
cos(y) + i sin(y) を計算

多くのCPU (x86など) では、これは非常に効率的で、 別々に sin(y) と cos(y) を計算する場合のほぼ2倍の速度となります。 両方の値が必要な場合はこの関数を使うのが望ましいと言えるでしょう。

real frexp(real value, out int exp);
浮動小数点数値 value を符号・仮数部と、指数部に分解します

Returns:
value =x*2exp かつ .5 <= |x| < 1.0 となる 返値xexp を計算します。
xvalue の符号は一致します。

特殊な値の場合
value returns exp
±0.0 ±0.0 0
+∞ +∞ int.max
-∞ -∞ int.min
±NAN ±NAN int.min


int ilogb(real x);
x の指数を符号付整数値として取り出します

x が特殊値の場合を除き、結果は cast(int)logb(x) と一致します

特殊な値の場合
x ilogb(x) Range error?
0 FP_ILOGB0 yes
±∞ int.max no
NAN FP_ILOGBNAN no


real ldexp(real n, int exp);
n * 2exp を計算します

References:
frexp

real log(real x);
x の自然対数を計算します

特殊な値の場合
x log(x) divide by 0? invalid?
±0.0 -∞ yes no
<0.0 NAN no yes
+∞ +∞ no no


real log10(real x);
x の底10の対数を計算します

特殊な値の場合
x log10(x) divide by 0? invalid?
±0.0 -∞ yes no
<0.0 NAN no yes
+∞ +∞ no no


real log1p(real x);
(1 + x)の自然対数を計算します

非常に小さい x については、log1p(x) の方が log(1 + x) よりも正確です。

特殊な値の場合
x log1p(x) divide by 0? invalid?
±0.0 ±0.0 no no
-1.0 -∞ yes no
<-1.0 NAN no yes
+∞ -∞ no no


real log2(real x);
x の底2の対数 log2x を計算します

特殊な値の場合
x log2(x) divide by 0? invalid?
±0.0 -∞ yes no
<0.0 NAN no yes
+∞ +∞ no no


real logb(real x);
x の指数を符号付整数として取り出します

x が非正規化数の場合、正規化数であるかのように扱われます。 正で有限の x について:

1 <= x * FLT_RADIX-logb(x) < FLT_RADIX

特殊な値の場合
x logb(x) divide by 0?
±∞ +∞ no
±0.0 -∞ yes


real modf(real x, inout real y);
x/y の計算の余りを返します

Returns:
i を x から y を完全に引き算できる回数としたときの、 x - i * y の値を返します。 結果は x と同じ符号を持ちます

特殊な値の場合
x y modf(x, y) invalid?
±0.0 not 0.0 ±0.0 no
±∞ anything NAN yes
anything ±0.0 NAN yes
!=±∞ ±∞ x no


real scalbn(real x, int n);
効率的に x * 2n を計算します

scalbn は、アンダーフローとオーバーフローを 通常の算術演算と同じように扱います

特殊な値の場合
x scalb(x)
±∞ ±∞
±0.0 ±0.0


real cbrt(real x);
x の立方根を計算します

特殊な値の場合
x cbrt(x) invalid?
±0.0 ±0.0 no
NAN NAN yes
±∞ ±∞ no


real fabs(real x);
絶対値 |x| を返します

特殊な値の場合
x fabs(x)
±0.0 +0.0
±∞ +∞


real hypot(real x, real y);
他の二辺の長さが xy の直角三角形の 斜辺の長さを返します。 斜辺の長さとはつまり、 xy のそれぞれの自乗の和の平方根です:

sqrt(x² + y²)

hypot(x, y), hypot(y, x), hypot(x, -y) はどれも同じ値になります

特殊な値の場合
x y hypot(x, y) invalid?
x ±0.0 |x| no
±∞ y +∞ no
±∞ NAN +∞ no


real erf(real x);
x の誤差関数を返します

error function

real erfc(real x);
x の余誤差関数 1 - erf(x) を返します

complementary error function

real lgamma(real x);
ガンマ関数の自然対数です

引数のガンマ関数の絶対値の、 底 e (2.718...) での対数値を返します

実数に関しては、lgamma は log(fabs(gamma(x))) と同値です

特殊な値の場合
x lgamma(x) invalid?
NAN NAN yes
integer <= 0 +∞ yes
±∞ +∞ no


real tgamma(real x);
ガンマ関数 Γ(x)

Γ(x) は、 階乗関数を実数や複素数に一般化したものです。 x! 同様、 Γ(x+1) = x*Γ(x) が成り立ちます

数学的には、z.re > 0 ならば Γ(z) = 0 tz-1e-t dt です

特殊な値の場合
x Γ(x) invalid?
NAN NAN yes
±0.0 ±∞ yes
integer >0 (x-1)! no
integer <0 NAN yes
+∞ +∞ no
-∞ NAN yes


References:
http://en.wikipedia.org/wiki/Gamma_function, http://www.netlib.org/cephes/ldoubdoc.html#gamma

real ceil(real x);
x を (正の無限大方向の) 次の整数に 切り上げた値を返します

real floor(real x);
x を (負の無限大方向の) 次の整数に 切り捨てた値を返します

real nearbyint(real x);
現在の丸めモードを用いて、 x を一番近い整数へと丸めます

rint 関数と違って、nearbyint は FE_INEXACT 例外が発生しません。

real rint(real x);
現在の丸めモードを用いて、 x を一番近い整数へと丸めます。 返値が x と等しくなかった場合、 FE_INEXACT 例外が発生します。 nearbyint も同じ操作を実行しますが、FE_INEXACT はセットされません。

long lrint(real x);
現在の丸めモードを用いて、 x を一番近い整数へと丸めます。

これは、一般的に浮動小数点数を整数に変換する最も速い方法です。 この関数の返値は、xの小数部がちょうど 0.5 だった場合に 丸めモードに依存することに注意してください。 デフォルトの丸めモード (偶数に丸める) では、 lrint(4.5) == 4, lrint(5.5)==6 です。

real round(real x);
x を一番近い整数へと丸めます。 x の小数部がちょうど 0.5 だった場合、 返値は偶数となります。

long lround(real x);
x を一番近い整数へと丸めます。

x の小数部がちょうど 0.5 だった場合、 返値は0から遠い方になります。

Note:
Windows版では非対応

real trunc(real x);
x の小数部を落とし、整数部分を返します

"chop" 丸めと呼ばれる動作です。

real remainder(real x, real y);
real remquo(real x, real y, out int n);
IEC 60559 に従い、剰余 x REM y を計算します

REMは、x - y * n をもっとも x / y に 近くなるように整数nを決めた時の値です。 |n - x / y| == 0.5 の場合は、nは偶数とします。 結果がゼロの場合、符号ビットは x と同じになります。 それ以外の場合は、符号は x / y と同じです。 丸めモードは remainder 関数の動作に影響しません。

remquo は上記のnを引数に返します

特殊な値の場合
x y remainder(x, y) n invalid?
±0.0 not 0.0 ±0.0 0.0 no
±∞ anything NAN ? yes
anything ±0.0 NAN ? yes
!= ±∞ ±∞ x ? no


Note:
Windows版では非対応

int isnan(real e);
e が NaN なら非ゼロを返します

int isfinite(real e);
e が有限(無限でないか NAN)なら非ゼロを返します

int isnormal(X)(X x);
x が正規化数 (ゼロ,非正規化数,無限,NANのいずれでもない数) なら非ゼロを返します

int issubnormal(float f);
int issubnormal(double d);
int issubnormal(real x);
数値が非正規化数かどうかを返します。 非正規化数は、指数部が0で、仮数部のMSBが0の数です。

int isinf(real x);
x が ±∞ なら非ゼロを返します。

bool isIdentical(real x, real y);
xy のバイナリ表現が等しいか?

== とほぼ同様ですが、正のゼロと負のゼロが区別され、 同じビットパターンを持つ NAN 同士は等しいとされるという違いがあります。

int signbit(real x);
x の符号ビットがセットされていれば 1、いなければ 0 を返します

real copysign(real to, real from);
from の符号ビットを to にセットした値を返します

real nan(char[] tagp);
tagp[] の情報を埋め込んだ Quiet NAN を作ります

BUGS:
DMD は常に real.nan を返し、情報は無視されます。

real nextUp(real x);
double nextUp(double x);
float nextUp(float x);
x より大きい x の次の浮動小数点値を計算します。

realとして表現可能な、xより大きい最小の数を返します。 つまり、IEEE数直線で次の数を返します。

Special Values
x nextUp(x)
-∞ -real.max
±0.0 real.min*real.epsilon
real.max
NAN NAN


Remarks:
この関数は次期 IEEE 754R 標準に含まれています。

real nextDown(real x);
double nextDown(double x);
float nextDown(float x);
x より小さい x の次の浮動小数点値を計算します。

realとして表現可能な、xより小さい最大の数を返します。 つまり、IEEE数直線で直前の数を返します。

Special Values
x nextDown(x)
real.max
±0.0 -real.min*real.epsilon
-real.max -∞
-∞ -∞
NAN NAN


Remarks:
この関数は次期 IEEE 754R 標準に含まれています。

real nextafter(real x, real y);
y の方向にある、x の次に表現可能な値を返します。

y > x の時、結果はxの次に大きい浮動小数点値です。 y < x の時、結果はxの次に小さい浮動小数点値です。 x == y の時、結果はyです xが有限で結果が無限になるとき、FE_INEXACT例外とFE_OVERFLOW例外がセットされます 結果が非正規化数で、xy が等しくないとき、 FE_INEXACT例外と FE_UNDERFLOW例外 がセットされます。

real fdim(real x, real y);
xy の正の距離を返します。

Returns:
特殊な値の場合
x, y fdim(x, y)
x > y x - y
x <= y +0.0


real fmax(real x, real y);
xy の大きいほうを返します

real fmin(real x, real y);
xy の小さいほうを返します

real fma(real x, real y, real z);
(x * y) + z を返します。 丸めは現在の丸めモードに従って一度だけ行われます。

BUGS:
現在は正しく実装されていません - 丸めは2回行われます。

real pow(real x, uint n);
real pow(real x, int n);
整数乗の高速な実装です

real pow(real x, real y);
xy を計算します

特殊な値の場合
x y pow(x, y) div 0 invalid?
anything ±0.0 1.0 no no
|x| > 1 +∞ +∞ no no
|x| < 1 +∞ +0.0 no no
|x| > 1 -∞ +0.0 no no
|x| < 1 -∞ +∞ no no
+∞ > 0.0 +∞ no no
+∞ < 0.0 +0.0 no no
-∞ 奇整数 > 0.0 -∞ no no
-∞ > 0.0, 奇整数以外 +∞ no no
-∞ 奇整数 < 0.0 -0.0 no no
-∞ < 0.0, 奇整数以外 +0.0 no no
±1.0 ±∞ NAN no yes
< 0.0 finite, nonintegral NAN no yes
±0.0 奇整数 < 0.0 ±∞ yes no
±0.0 < 0.0, 奇整数以外 +∞ yes no
±0.0 奇整数 > 0.0 ±0.0 no no
±0.0 > 0.0, 奇整数以外 +0.0 no no


int feqrel(X)(X x, X y);
どのくらいの精度まで xy が等しいかを返します

Returns:
xy が等しい仮数部のビット数を返します。 例えば、0x1.F8p+60 と 0x1.F1p+60 は5bit等しいことになります。

特殊な値の場合
x y feqrel(x, y)
x x real.mant_dig
x >= 2*x 0
x <= x/2 0
NAN any 0
any NAN 0


real poly(real x, real[] A);
多項式 A(x) = a0 + a1x + a2x² + a3x³ ... を計算します

Horner則 A(x) = a0 + x(a1 + x(a2 + x(a3 + ...))) を使用しています

Params:
real[] A 係数 a0, a1, ... の配列