Everything
7.4.7 <math.h>

各種の数値計算を行います。

以下の定数(マクロ)はすべて処理系定義です。

種別

定義名

説明

定数

(マクロ)

EDOM

関数に入力するパラメータの値が関数内で定義している値の範囲を超える時、errnoに設定する値です。

ERANGE

関数の計算結果がdouble型の値として表せない時、あるいはオーバフロー/アンダフローとなった時、errnoに設定する値です。

HUGE_VAL

HUGE_VALF <-lang=c99>

HUGE_VALL <-lang=c99>

関数の計算結果がオーバフローした時に、関数のリターン値として返す値です。

INFINITY <-lang=c99>

正または符号なしの無限大を表すfloat型の定数式に展開します。

NAN <-lang=c99>

float型のqNaNをサポートしている場合に定義されます。

FP_INFINITE <-lang=c99>

FP_NAN <-lang=c99>

FP_NORMAL <-lang=c99>

FP_SUBNORMAL <-lang=c99>

FP_ZERO <-lang=c99>

浮動小数点数の値の排他的な種類を表します。

FP_FAST_FMA <-lang=c99>

FP_FAST_FMAF <-lang=c99>

FP_FAST_FMAFL <-lang=c99>

fma関数がdouble型のオペランドを持つ1回の乗算と加算が、同等以上の速度で実行される場合に定義されます。

FP_ILOGB0 <-lang=c99>

FP_ILOGBNAN <-lang=c99>

それぞれ0または非数の場合にilogbで返される値の整数定数式に展開します。

MATH_ERRNO <-lang=c99>

MATH_ERREXCEPT <-lang=c99>

それぞれ整数定数1および2に展開します。

math_errhandling <-lang=c99>

Int型で値が、MATH_ERRNO,MATH_ERREXCEPTのビット単位の論理和の式に展開します。

float_t <-lang=c99>

double_t <-lang=c99>

それぞれfloat型、double型と同じ幅を持つ浮動小数点型です。

関数

(マクロ)

fpclassify <-lang=c99>

実引数の値を非数、無限大、正規化数、非正規化数、0に分類します。

isfinite <-lang=c99>

実引数が有限の値か判定します。

isinf <-lang=c99>

実引数が無限大か判定します。

isnan <-lang=c99>

実引数が非数か判定します。

isnormal <-lang=c99>

実引数が正規化数か判定します。

signbit <-lang=c99>

実引数の符号が負か判定します。

isgreater <-lang=c99>

最初の引数が2番目の引数より大きいかどうかを判定します。

isgreaterequal <-lang=c99>

最初の引数が2番目の引数以上かどうかを判定します。

isless <-lang=c99>

最初の引数が2番目の引数より小さいかどうかを判定します。

islessequal <-lang=c99>

最初の引数が2番目の引数以下かどうかを判定します。

islessgreater <-lang=c99>

最初の引数が2番目の引数より小さいまたは大きいを判定します。

isunordered <-lang=c99>

順序付けられていないかどうかを判定します。

関数

acos / acosf / acosl

浮動小数点値の逆余弦を計算します。

asin / asinf / asinl

浮動小数点値の逆正弦を計算します。

atan / atanf / atanl

浮動小数点値の逆正接を計算します。

atan2 / atan2f / atan2l

浮動小数点値どうしを除算した結果の値の逆正接を計算します。

cos / cosf / cosl

浮動小数点値のラジアン値の余弦を計算します。

sin / sinf / sinl

浮動小数点値のラジアン値の正弦を計算します。

tan / tanf / tanl

浮動小数点値のラジアン値の正接を計算します。

cosh / coshf / coshl

動小数点値の双曲線余弦を計算します。

sinh / sinhf / sinhl

浮動小数点値の双曲線正弦を計算します。

tanh / tanhf / tanhl

浮動小数点値の双曲線正接を計算します。

exp / expf / expl

浮動小数点値の指数関数を計算します。

frexp / frexpf / frexpl

浮動小数点値を[0.5,1.0]の値と2のべき乗の積に分解します。

ldexp / ldexpf / ldexpl

浮動小数点値と2のべき乗の乗算を計算します。

log / logf / logl

浮動小数点値の自然対数を計算します。

log10 / log10f / log10l

浮動小数点値の10を底とする対数を計算します。

modf / modff / modfl

浮動小数点値を整数部分と小数部分に分解します。

pow / powf / powl

浮動小数点値のべき乗を計算します。

sqrt / sqrtf / sqrtl

浮動小数点値の正の平方根を計算します。

ceil / ceilf / ceill

浮動小数点値の小数点以下を切り上げた整数値を求めます。

fabs / fabsf / fabsl

浮動小数点値の絶対値を計算します。

関数

floor / floorf / floorl

浮動小数点値の小数点以下を切り捨てた整数値を求めます。

fmod / fmodf / fmodl

浮動小数点値どうしを除算した結果の余りを計算します。

acosh / acoshf / acoshl

<-lang=c99>

浮動小数点値の双曲線逆余弦を計算します。

asinh / asinhf / asinhl

<-lang=c99>

浮動小数点値の双曲線逆正弦を計算します。

atanh / atanhf / atanhl

<-lang=c99>

浮動小数点値の双曲線逆正接を計算します。

exp2 / exp2f / exp2l

<-lang=c99>

浮動小数点値の2のx乗を計算します。

expm1 / expm1f / expm1l

<-lang=c99>

自然対数のx乗から1を引いた値を計算します。

ilogb / ilogbf / ilogbl

<-lang=c99>

符号ありintの値としてxの指数を抽出します。

log1p / log1pf / log1pl

<-lang=c99>

実引数に1を加えた値の自然対数を計算します。

log2 / log2f / log2l

<-lang=c99>

2を底とする対数を計算します。

logb / logbf / logbl

<-lang=c99>

符号あり整数の値としてxの指数を抽出します。

scalbn / scalbnf / scalbnl / scalbln / scalblnf / scalblnl

<-lang=c99>

X×FLT_RADIXnを計算します。

cbrt / cbrtf / cbrtl

<-lang=c99>

浮動小数点値の立方根を計算します。

hypot / hypotf / hypotl

<-lang=c99>

 

引数の2乗の和の平方根( )を計算します。

erf / erff / erfl

<-lang=c99>

誤差関数を計算します。

erfc / erfcf / erfcl

<-lang=c99>

余誤差関数を計算します。

lgamma / lgammaf / lgammal

<-lang=c99>

ガンマ関数の絶対値の自然対数を計算します。

tgamma / tgammaf / tgammal

<-lang=c99>

ガンマ関数を計算します。

nearbyint / nearbyintf / nearbyintl

<-lang=c99>

浮動小数点値を丸め方向にしたがって、浮動小数点形式の整数値に丸めます。

rint / rintf / rintl

<-lang=c99>

nearbyintに対して、浮動小数点例外を生成することがあります。

lrint / lrintf / lrintl / llrint / llrintf / llrintl

<-lang=c99>

丸め方向に従って、最も近い整数値に丸めます。

round / roundf / roundl

<-lang=c99>

浮動小数点形式の最も近い整数値に丸めます。

関数

lround / lroundf / lroundl / llround / llroundf / llroundl

<-lang=c99>

最も近い整数値に丸めます。

trunc / truncf / truncl

<-lang=c99>

浮動小数点形式の最も近い整数値に丸めます。

remainder / remainderf / remainderl

<-lang=c99>

IEEE60559の剰余x REM yを計算します。

remquo / remquof / remquol

<-lang=c99>

x/yと同符号で、商の絶対値を2nを法として合同である絶対値を計算します。

copysign / copysignf / copysignl

<-lang=c99>

絶対値、および符号が同じ値を生成します。

nan / nanf / nanl

<-lang=c99>

nan(“n文字列”)は、strtod(“NAN(n文字列)”, (char**) NULL)と等価です。

nextafter / nextafterf / nextafterl

<-lang=c99>

関数の型に変換して、実軸上の次に表現可能な値を求めます。

nexttoward / nexttowardf / nexttowardl

<-lang=c99>

2番目の引数型がlong double,引数同士が等しい場合に、2番目の引数をその関数の型に変換して返す以外は、nextafter関数群と同じです。

fdim / fdimf / fdiml

<-lang=c99>

正の差を計算します。

fmax / fmaxf / fmaxl

<-lang=c99>

大きい方の値を求めます。

fmin / fminf / fminl

<-lang=c99>

小さいほうの値を求めます。

fma / fmaf / fmal

<-lang=c99>

(x×y)+zをひとつの3項演算としてまとめて計算します。

 

エラーが発生した時の動作を以下に説明します。

 

(1)

定義域エラー

関数に入力するパラメータの値が関数内で定義している値の範囲を超えている時、定義域エラーが発生します。この時errnoにはEDOMの値が設定されます。また、関数のリターン値は、処理系定義です。

(2)

範囲エラー

関数における計算結果がdouble型の値として表せない時には範囲エラーが発生します。この時、errnoにはERANGEの値が設定されます。また、計算結果がオーバフローの時は、正しく計算が行われた時と同様の符号のHUGE_VAL、 HUGE_VALFあるいは HUGE_VALLの値をリターン値として返します。逆に計算結果がアンダフローの時は、0をリターン値として返します。

注 1.

<math.h>の関数の呼び出しによって定義域エラーが発生する可能性がある場合は、結果の値をそのまま用いるのは危険です。必ずerrnoをチェックしてから用いてください。

 

          .
          .
          .
          1  x=asin(a);
          2  if (errno==EDOM)
          3  printf("error\n");
          4  else
          5  printf("result is : %lf\n",x);
          .
          .
          .

 

1行目で、asin関数を使って逆正弦値を求めます。このとき、実引数aの値が、asin関数の定義域[-1.0, 1.0]の範囲を超えていると、errnoに値EDOMが設定されます。2行目で定義域エラーが生じたかどうかの判定をします。定義域エラーが生じれば、3行目で、errorを出力します。定義域エラーが生じなければ5行目で、逆正弦値を出力します。

注 2.

範囲エラーが発生するかどうかは、コンパイラによって定まる、浮動小数点型の内部表現形式によって異なります。例えば無限大を値として表現できる内部表現形式を採用している場合、範囲エラーの生じないように<math.h>のライブラリ関数を実現することができます。

 

処理系定義仕様

 

項目

コンパイラの仕様

1

数学関数の入力実引数が範囲を超えたときの数学関数が返す値

非数を返します。非数の形式は「4.1.5 データの内部表現と領域」の「(5) 浮動小数点型の仕様」を参照してください。

2

数学関数でアンダフローエラーが発生したときマクロ「ERANGE」の値が「errno」に設定されるかどうか

errnoにERANGEを設定する関数については、「10.5.6 C標準ライブラリ関数のエラーメッセージ」を参照してください。上記以外は設定しません。

3

fmod関数で第2実引数の値が0の場合、範囲エラーとなるかどうか

範囲エラーとなります。

fmodの戻り値の詳細は、「7.4.7 <math.h>」の「fmod / fmodf / fmodl」を参照してください。