<math.h>には、3種類のエラーが規定されています。
- 定義域エラー
-
入力の値が、数学関数が定義される定義域外の場合。
- 極エラー
-
入力引数がその極限に近づくことで、結果が無限大そのものとなる場合。
- 値域エラー
-
関数の結果の絶対値が大きすぎるため、指定された型で表現できない場合。
ここで定義域エラーと極エラーは、数学関数を呼び出す前に引数の範囲検査を慎重に行うことで未然に防ぐことができます。しかし値域エラーは通常、未然に防ぐことはできません。下記表にはdouble型の数学関数の中でも、いずれかのエラーが発生しうるものを列挙しています。また各関数の引数が適切な範囲であることを確認するための条件と、演算結果が値域エラーまたは極エラーになりうるか否かを示しています。
スクロールできます
関数 | 定義域 | 値域 | 極 |
---|---|---|---|
acos(x) | (-1 <= x) && (x <= 1) | ||
asin(x) | (-1 <= x) && (x <= 1) | 有 | |
atan(x) | 有 | ||
atan2(y, x) | (x != 0) && (y != 0) | ||
acosh(x) asinh(x) | 有 | ||
atanh(x) | (-1 < x) && (x < 1) | 有 | 有 |
cosh(x) sinh(x) | 有 | ||
exp(x) exp2(x) expm1(x) | 有 | ||
ldexp(x, exp) | 有 | ||
log(x) log10(x) log2(x) | x >= 0 | 有 | |
log1p(x) | x >= -1 | 有 | |
ilogb(x) | (x != 0) && (!isinf(x)) && (!isnan(x)) | 有 | |
logb(x) | 有 | 有 | |
scalbn(x, n) scalbln(x, n) | 有 | ||
hypot(x, y) | 有 | ||
pow(x, y) | (x > 0) || ((x == 0) && (y > 0)) || ((x < 0) && (y == 整数)) | 有 | 有 |
sqrt(x) | x >= 0 | ||
erf(x) erfc(x) | 有 | ||
lgamma(x) tgamma(x) | (x != 0) && (!((x < 0) && (x == 整数))) | 有 | 有 |
lrint(x) lround(x) | 有 | ||
fmod(x, y) remainder(x, y) remquo(x, y, quo) | y != 0 | 有 | |
nextafter(x, y) nexttoward(x, y) | 有 | ||
fdim(x, y) | 有 | ||
fma(x, y, z) | 有 |