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 <-lang=c99>

acoshf <-lang=c99>

acoshl <-lang=c99>

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

asinh <-lang=c99>

asinhf <-lang=c99>

asinhl <-lang=c99>

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

atanh <-lang=c99>

atanhf <-lang=c99>

atanhl <-lang=c99>

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

関数

exp2 <-lang=c99>

exp2f <-lang=c99>

exp2l <-lang=c99>

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

expm1 <-lang=c99>

expm1f <-lang=c99>

expm1l <-lang=c99>

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

ilogb <-lang=c99>

ilogbf <-lang=c99>

ilogbl <-lang=c99>

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

log1p <-lang=c99>

log1pf <-lang=c99>

log1pl <-lang=c99>

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

log2 <-lang=c99>

log2f <-lang=c99>

log2l <-lang=c99>

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

logb <-lang=c99>

logbf <-lang=c99>

logbl <-lang=c99>

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

scalbn <-lang=c99>

scalbnf <-lang=c99>

scalbnl <-lang=c99>

scalbln <-lang=c99>

scalblnf <-lang=c99>

scalblnl <-lang=c99>

X×FLT_RADIXnを計算します。

cbrt <-lang=c99>

cbrtf <-lang=c99>

cbrtl <-lang=c99>

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

hypot <-lang=c99>

hypotf <-lang=c99>

hypotl <-lang=c99>

 

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

erf <-lang=c99>

erff <-lang=c99>

erfl <-lang=c99>

誤差関数を計算します。

erfc <-lang=c99>

erfcf <-lang=c99>

erfcl <-lang=c99>

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

lgamma <-lang=c99>

lgammaf <-lang=c99>

lgammal <-lang=c99>

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

tgamma <-lang=c99>

tgammaf <-lang=c99>

tgammal <-lang=c99>

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

nearbyint <-lang=c99>

nearbyintf <-lang=c99>

nearbyintl <-lang=c99>

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

rint <-lang=c99>

rintf <-lang=c99>

rintl <-lang=c99>

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

関数

lrint <-lang=c99>

lrintf <-lang=c99>

lrintl <-lang=c99>

llrint <-lang=c99>

llrintf <-lang=c99>

llrintl <-lang=c99>

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

round <-lang=c99>

roundf <-lang=c99>

roundl <-lang=c99>

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

lround <-lang=c99>

lroundf <-lang=c99>

lroundl <-lang=c99>

llround <-lang=c99>

llroundf <-lang=c99>

llroundl <-lang=c99>

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

trunc <-lang=c99>

truncf <-lang=c99>

truncl <-lang=c99>

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

remainder <-lang=c99>

remainderf <-lang=c99>

remainderl <-lang=c99>

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

remquo <-lang=c99>

remquof <-lang=c99>

remquol <-lang=c99>

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

copysign <-lang=c99>

copysignf <-lang=c99>

copysignl <-lang=c99>

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

nan <-lang=c99>

nanf <-lang=c99>

nanl <-lang=c99>

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

nextafter <-lang=c99>

nextafterf <-lang=c99>

nextafterl <-lang=c99>

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

nexttoward <-lang=c99>

nexttowardf <-lang=c99>

nexttowardl <-lang=c99>

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

fdim <-lang=c99>

fdimf <-lang=c99>

fdiml <-lang=c99>

正の差を計算します。

fmax <-lang=c99>

fmaxf <-lang=c99>

fmaxl <-lang=c99>

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

fmin <-lang=c99>

fminf <-lang=c99>

fminl <-lang=c99>

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

fma <-lang=c99>

fmaf <-lang=c99>

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.4 データの内部表現と領域」の「(5) 浮動小数点型の仕様」を参照してください。

2

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

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

3

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

範囲エラーとなります。

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

 

acos/ acosf/ acosl

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

 

[指定形式]

#include <math.h>

double acos(double d);

float acosf(float d);

long double acosl(long double d);

 

[引数]

d 逆余弦を求める浮動小数点値

 

[戻り値]

正常:dの逆余弦値

異常:定義域エラーの時は、非数を返します

 

[備考]

dの値が[-1.0,1.0]の範囲を超えている時、定義域エラーになります。

acos関数のリターン値の範囲は[0,π]です。

 

asin/asinf/asinl

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

 

[指定形式]

#include <math.h>

double asin(double d);

float asinf(float d);

long double asinl(long double);

 

[引数]

d 逆正弦を求める浮動小数点値

 

[戻り値]

正常:dの逆正弦値

異常:定義域エラーの時は、非数を返します

 

[備考]

dの値が[-1.0,1.0]の範囲を超えている時、定義域エラーになります。

asin関数のリターン値の範囲は[-π/2,π/2]です。

 

atan/ atanf/ atanl

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

 

[指定形式]

#include <math.h>

double atan(double d);

float atanf(float d);

long double atanl(long double d);

 

[引数]

d 逆正接を求める浮動小数点値

 

[戻り値]

dの逆正接値

 

[備考]

atan関数のリターン値の範囲は(-π/2,π/2)です。

 

atan2/ atan2f/ atan2l

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

 

[指定形式]

#include <math.h>

double atan2(double y, double x);

float atan2f(float y, float x);

long double atan2l(long double y, long double x);

 

[引数]

x 除数

y 被除数

 

[戻り値]

正常:yをxで除算したときの逆正接値

異常:定義域エラーの時は、非数を返します

 

[備考]

x, yの値がともに0.0の時、定義域エラーになります。

atan2関数のリターン値の範囲は(-π,π)です。atan2関数の示す意味を図 7.1に示します。図に示すように、atan2関数の結果は、点(x, y)と原点を通る直線とx軸をなす角を求めます。y=0.0でxが負の時、結果はπ、x=0.0の時、yの値の正負に従って結果は±π/2となります。

図 7.1

atan2関数の意味

 

cos/ cosf/ cosl

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

 

[指定形式]

#include <math.h>

double cos(double d);

float cosf(float d);

long double cosl(long double d);

 

[引数]

d 余弦を求めるラジアン値

 

[戻り値]

dの余弦値

 

sin/ sinf/ sinl

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

 

[指定形式]

#include <math.h>

double sin(double d);

float sinf(float d);

long double sinl(long double d);

 

[引数]

d  正弦を求めるラジアン値

 

[戻り値]

dの正弦値

 

tan/ tanf/ tanl

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

 

[指定形式]

#include <math.h>

double tan(double d);

float tanf(float d);

long double tanl(long double d);

 

[引数]

d 正接を求めるラジアン値

 

[戻り値]

dの正接値

 

cosh/ coshf/ coshl

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

 

[指定形式]

#include <math.h>

double cosh(double d);

float coshf(float d);

long double coshl(long double d);

 

[引数]

d 双曲線余弦を求める浮動小数点値

 

[戻り値]

dの双曲線正弦値

 

sinh / sinhf / sinhl

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

 

[指定形式]

#include <math.h>

double sinh(double d);

float sinhf(float d);

long double sinhl(long double d);

 

[引数]

d 双曲線正弦を求める浮動小数点値

 

[戻り値]

dの双曲線正弦値

 

tanh/ tanhf/ tanhl

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

 

[指定形式]

#include <math.h>

double tanh(double d);

float tanhf(float d);

long double tanhl(long double d)

 

[引数]

d 双曲線正接を求める浮動小数点値

 

[戻り値]

dの双曲線正接値

 

exp/ expf/ expl

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

 

[指定形式]

#include <math.h>

double exp(double d);

float expf(float d);

long double expl(long double d);

 

[引数]

d 指数関数を求める浮動小数点値

 

[戻り値]

dの指数関数値

 

frexp/ frexpf/ frexpl

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

 

[指定形式]

#include <math.h>

double frexp(double value, long *exp);

float frexpf(float value, long *exp);

long double frexpl(long double value, long *exp);

 

[引数]

value [0.5,1.0)の値と2のべき乗の積に分解する浮動小数点値

exp 2のべき乗値を格納する記憶域へのポインタ

 

[戻り値]

valueが0.0の時 :0.0

valueが0.0でない時 :ret*2expの指している領域の値=valueで定義されるretの値

 

[備考]

frexp関数は、valueを[0.5,1.0)の値と2のべき乗の積に分解します。expの指す領域には、分解した結果の2のべき乗値を設定します。

リターン値retの値の範囲は[0.5,1.0)または0.0になります。

valueが0.0ならば、expの指すint型の記憶域の内容とretの値は0.0になります。

 

ldexp/ ldexpf/ ldexpl

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

 

[指定形式]

#include <math.h>

double ldexp(double e, long f);

float ldexpf(float e, long f);

long double ldexpl(long double e, long f);

 

[引数]

e 2のべき乗値を求める浮動小数点値

f 2のべき乗値

 

[戻り値]

e*2fの演算結果の値

 

log/ logf/ logl

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

 

[指定形式]

#include <math.h>

double log(double d);

float logf(float d);

long double logl(long double d);

 

[引数]

d 自然対数を求める浮動小数点値

 

[戻り値]

正常:dの自然対数の値

異常:定義域エラーの時は、非数を返します

 

[備考]

dの値が負の値の時、定義域エラーになります。

dの値が0.0の時、範囲エラーになります。

 

log10/ log10f/ log10l

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

 

[指定形式]

#include <math.h>

double log10(double d);

float log10f(float d);

long double log10l(long double d);

 

[引数]

d 10を底とする対数を求める浮動小数点値

 

[戻り値]

正常:dは10を底とする対数値

異常:定義域エラーの時は、非数を返します

 

[備考]

dの値が負の値の時、定義域エラーになります。

dの値が0.0の時、範囲エラーになります。

 

modf/ modff/ modfl

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

 

[指定形式]

#include <math.h>

double modf(double a, double *b) ;

float modff(float a, float *b);

long double modfl(long double a, long double *b);

 

[引数]

a 整数部分と小数部分に分解する浮動小数点値

b 整数部分を格納する記憶域を指すポインタ

 

[戻り値]

aの小数部分

 

pow/ powf/ powl

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

 

[指定形式]

#include <math.h>

double pow(double x, double y);

float powf(float x, float y);

long double powl(long double x, long double y);

 

[引数]

x べき乗される値

y べき乗する値

 

[戻り値]

正常:xのy乗の値

異常:定義域エラーの時は、非数を返します

 

[備考]

エラー条件 xの値が0.0で、かつyの値が0.0以下の時、あるいはxの値が負でyの値が整数値でない時、定義域エラーになります。

 

sqrt/ sqrtf/ sqrtl

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

 

[指定形式]

#include <math.h>

double sqrt(double d);

float sqrtf(float d);

long double sqrtl(long double d);

 

[引数]

d 正の平方根を求める浮動小数点値

 

[戻り値]

正常:dの正の平方根の値

異常:定義域エラーの時は、非数を返します

 

[備考]

dの値が負の値の時、定義域エラーになります。

 

ceil/ ceilf/ ceill

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

 

[指定形式]

#include <math.h>

double ceil(double d);

float ceilf(float d);

long double ceill( long double d);

 

[引数]

d 小数点以下を切り上げる浮動小数点値

 

[戻り値]

dの小数点以下を切り上げた整数値

 

[備考]

ceil関数は、dの値より大きいかまたは等しい最小の整数値をdouble型の値として返す関数です。したがってdの値が負の値の時は小数点以下を切り捨てた時の値を返します。

 

fabs/ fabsf/ fabsl

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

[指定形式]

#include <math.h>

double fabs(double d);

float fabsf(float d);

long double fabsl(long double d);

 

[引数]

d 絶対値を求める浮動小数点値

 

[戻り値]

dの絶対値

 

floor/ floorf/ floorl

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

 

[指定形式]

#include <math.h>

double floor(double d);

float floorf(float d);

long double floorl(long double d);

 

[引数]

d 小数点以下を切り捨てる浮動小数点値

 

[戻り値]

dの小数点以下を切り捨てた整数値

 

[備考]

floor関数は、dの値を超えない範囲の整数の最大値を、double型の値として返す関数です。したがってdの値が負の値の時は小数点以下を切り上げた時の値を返します。

 

fmod/ fmodf/ fmodl

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

 

[指定形式]

#include <math.h>

double fmod(double x, double y);

float fmodf(float x, float y);

long double fmodl(long double x, long double y);

 

[引数]

x 被除数

y 除数

 

[戻り値]

yの値が0.0の時 :x

yの値が0.0でない時 :xをyで除算した結果の余り

yが±∞の場合、x を返します。

xが±∞の場合、またはyが0の場合、非数を返し、グローバル変数errnoにマクロEDOMを設定します。

 

[備考]

fmod関数では、引数x、y、リターン値retの間には、次に示す関係が成立します。

x=y*i+ret (ただしiは整数値)

また、リターン値retの符号はxの符号と同じ符号になります。x/yの商を表現できない場合、結果の値は保証しません。

 

acosh/ acoshf/ acoshl

双曲線逆余弦を計算します。

 

[指定形式]

#include <math.h>

double acosh(double d);

float acoshf(float d);

long double acoshl(long double d);

 

[引数]

d 双曲線逆余弦を求める浮動小数点値

 

[戻り値]

正常:dの双曲線逆余弦値

異常:定義域エラーの時は、非数を返します

 

[備考]

dの値が1.0未満の時、定義域エラーになります。

acosh関数のリターン値の範囲は[0,+∞]です。

 

asinh/ asinhf/ asinhl

双曲線逆正弦を計算します。

 

[指定形式]

#include <math.h>

double asinh(double d);

float asinhf(float d);

long double asinhl(long double d);

 

[引数]

d 双曲線逆正弦を求める浮動小数点値

 

[戻り値]

dの双曲線逆正弦値

 

atanh/ atanhf/ atanhl

双曲線逆正接を計算します。

 

[指定形式]

#include <math.h>

double atanh(double d);

float atanhf(float d);

long double atanhl(long double d);

 

[引数]

d 双曲線逆正接を求める浮動小数点値

 

[戻り値]

正常: dの双曲線逆正接値

異常: 定義域エラーの場合は関数に応じてHUGE_VAL, HUGE_VALF, HUGE_VALL

    範囲エラーの場合は非数

 

[備考]

dの値が[-1,+1]の範囲にない場合は定義域エラーになります。

dの値が-1または1に等しい場合、範囲エラーになる可能性があります。

 

exp2/ exp2f/ exp2l

2のd乗を計算します。

 

[指定形式]

#include <math.h>

double exp2(double d);

float exp2f(float d);

long double exp2l(long double d);

 

[引数]

d 指数関数を求める浮動小数点数

 

[戻り値]

正常: 2の指数関数値

異常: 範囲エラーの場合は0又は関数に応じて+HUGE_VAL, +HUGE_VALF, +HUGE_VALL

 

[備考]

dの絶対値が大きすぎる場合、範囲エラーになります。

 

expm1/ expm1f/ expm1l

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

 

[指定形式]

#include <math.h>

double expm1(double d);

float expm1f(float d);

long double expm1l(long double d);

 

[引数]

d 自然対数の底eの指数となる値

 

[戻り値]

正常:自然対数の底eのd乗から1を引いた値

異常:範囲エラーの場合は関数に応じて-HUGE_VAL, -HUGE_VALF, -HUGE_VALL

 

[備考]

dの値が0に近い場合でもexpm1(d)はexp(x)-1よりも正確に計算できます。

 

ilogb/ ilogbf/ ilogbl

dの指数を抽出します。

 

[指定形式]

#include <math.h>

long ilogb(double d);

long ilogbf(float d);

long ilogbl(long double d);

 

[引数]

d 指数を抽出する値

 

[戻り値]

正常: dの指数関数値

dが∞の場合はINT_MAX

dが非数の場合はFP_ILOGBNAN

dが0の場合はFP_ILOGBNAN

異常: dが0で範囲エラーの場合はFP_ILOGB0

 

[備考]

dの値が0の場合、範囲エラーになることがあります。

 

log1p/ log1pf/ log1pl

dに1 を加えた値のe を底とする自然対数を計算します。

 

[指定形式]

#include <math.h>

double log1p(double d);

float log1pf(float d);

long double log1pl(long double d);

 

[引数]

d 引数に1を加えた値の自然対数を計算する値

 

[戻り値]

正常: dに1を加えた値の自然対数

異常: 定義域エラーの場合は非数

    範囲エラーの場合は関数に応じて-HUGE_VAL, -HUGE_VALF, -HUGE_VALL

 

[備考]

dの値が-1より小さい場合、定義域エラーになります。

d の値が-1の場合、範囲エラーになります。

dの値が0に近い場合でもlog1p(d)はlog(1+d)より正確な計算ができます。

 

log2/ log2f/ log2l

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

 

[指定形式]

#include <math.h>

double log2(double d);

float log2f(float d);

long double log2l(long double d);

 

[引数]

d 対数を計算する値

 

[戻り値]

正常: dの2を底とする対数

異常: 定義域エラーの場合は非数

 

[備考]

dの値が負の値の場合、定義域エラーになります。

 

logb/ logbf/ logbl

dの浮動小数点数の内部表現における指数部を浮動小数点値として抽出します。

 

[指定形式]

#include <math.h>

double logb(double d);

float logbf(float d);

long double logbl(long double d);

 

[引数]

d 指数を抽出する値

 

[戻り値]

正常: dの符号付き指数

異常: 範囲エラーの場合は関数に応じて-HUGE_VAL, -HUGE_VALF, -HUGE_VALL

 

[備考]

dの値が0の場合、範囲エラーになることがあります。

dは常に正規化されているものとして処理します。

 

scalbn/ scalbnf/ scalbnl/ scalbln/ scalblnf/ scalblnl

浮動小数点数に整数である基数の累乗を計算します。

 

[指定形式]

#include <math.h>

double scalbn(double d, long e);

float scalbnf(float d, long e);

long double scalbnl(long double d, long e);

double scalbln(double d, long e);

float scalblnf(float d, long int e);

long double scalblnl(long double d, long int e);

 

[引数]

d FLT_RADIXをe乗した値と乗算する値

e FLT_RADIXを累乗する際に指数となる値

 

[戻り値]

正常: dとFLT_RADIXを乗算した値と等価の値

異常: 範囲エラーの場合は関数に応じて-HUGE_VAL, -HUGE_VALF, -HUGE_VALL

 

[備考]

dの値が0の場合、範囲エラーになることがあります。

実際にeを指数としたFLT_RADIXの累乗は計算しません。

 

cbrt/ cbrtf/ cbrtl

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

 

[指定形式]

#include <math.h>

double cbrt(double d);

float cbrtf(float d);

long double cbrtl(long double d);

 

[引数]

d 立方根を求める値

 

[戻り値]

dの立方根値

 

hypot/ hypotf/ hypotl

 

浮動小数点値の2乗の和の平方根( )を計算します。

 

[指定形式]

#include <math.h>

double hypot(double x, double y) ;

float hypotf(float x, float y);

long double hypotl(long double x, long double y);

 

[引数]

 

x, y 2乗の和の平方根( )を求める値

 

[戻り値]

 

正常: 2乗の和の平方根( )の値

異常: 範囲エラーの場合は関数に応じてHUGE_VAL, HUGE_VALF, HUGE_VALL

 

[備考]

結果がオーバーフローする場合に範囲エラーになることがあります。

 

erf/ erff/ erfl

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

 

[指定形式]

#include <math.h>

double erf(double d);

float erff(float d);

long double erfl(long double d);

 

[引数]

d 誤差関数値を求める値

 

[戻り値]

dの誤差関数値

 

erfc/ erfcf/ erfcl

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

 

[指定形式]

#include <math.h>

double erfc(double d);

float erfcf(float d);

long double erfcl(long double d);

 

[引数]

d 余誤関数値を求める値

 

[戻り値]

dの余誤関数値

 

[備考]

dの絶対値が大きすぎる場合、範囲エラーが発生します。

 

lgamma/ lgammaf/ lgammal

浮動小数点値のガンマ関数の対数を計算します。

 

[指定形式]

#include <math.h>

double lgamma(double d);

float lgammaf(float d);

long double lgammal(long double d);

 

[引数]

d ガンマ関数の対数値を求める値

 

[戻り値]

正常な場合: dのガンマ関数の対数値。

定義域エラーの場合: 数学的に正しい符号が付与されたHUGE_VAL, HUGE_VALF, HUGE_VALL

範囲エラーの場合: +HUGE_VAL, +HUGE_VALF, +HUGE_VALL

 

[備考]

dの絶対値が大きすぎる又は小さすぎる場合、範囲エラーを設定します。

dの値が負の整数又は0で、計算結果が表現できない場合、定義域エラーが発生します。

 

tgamma/ tgammaf/ tgammal

浮動小数点値のガンマ関数を計算します。

 

[指定形式]

#include <math.h>

double tgamma(double d);

float tgammaf(float d);

long double tgammal(long double d);

 

[引数]

d ガンマ関数値を求める値

 

[戻り値]

正常な場合: dのガンマ関数値。

定義域エラーの場合: dと同じ符号が付与されたHUGE_VAL, HUGE_VALF, HUGE_VALL

範囲エラーの場合: 0又は関数に応じて数学的に正しい符号が付与された+HUGE_VAL, +HUGE_VALF, +HUGE_VALL

 

[備考]

dの絶対値が大きすぎる又は小さすぎる場合、範囲エラーを設定します。

dの値が負の整数又は0で、計算結果が表現できない場合、定義域エラーが発生します。

 

nearbyint/ nearbyintf/ nearbyintl

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

 

[指定形式]

#include <math.h>

double nearbyint(double d);

float nearbyintf(float d);

long double nearbyintl(long double d);

 

[引数]

d 浮動小数点形式の整数値に丸める値

 

[戻り値]

dの浮動小数点形式の整数値に丸めた値

 

[備考]

nearbyint関数群は”不正確結果”浮動小数点例外を生成しません。

 

rint/ rintf/ rintl

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

 

[指定形式]

#include <math.h>

double rint(double d);

float rintf(float d);

long double rintl(long double d);

 

[引数]

d 浮動小数点形式の整数値に丸める値

 

[戻り値]

dの浮動小数点形式の整数値に丸めた値

 

[備考]

rint関数群は”不正確結果”浮動小数点例外を生成する場合があるという点のみでnearbyint関数群と違います。

 

lrint/ lrintf/ lrintl/ llrint/ llrintf/ llrintl

浮動小数点値を丸め方向にしたがって、最も近い整数値に丸めます。

 

[指定形式]

#include <math.h>

long int lrint (double d);

long int lrintf(float d);

long int lrintl(long double d);

long long int llrint (double d);

long long int llrintf(float d);

long long int llrintl(long double d);

 

[引数]

d 整数に丸める値

 

[戻り値]

正常: dを整数値に丸めた値

異常: 範囲エラーの場合は不定

 

[備考]

dの絶対値が大きすぎる場合、範囲エラーが発生する場合があります。

丸めた値がリターン値型の範囲外である場合のリターン値は未規定とします。

 

round/ roundf/ roundl/ lround/ lroundf/ lroundl/ llround/ llroundf/ llroundl

浮動小数点値を最も近い整数値に丸めます

 

[指定形式]

#include <math.h>

double round(double d);

float roundf(float d);

long double roundl(long double d);

long int lround(double d);

long int lroundf(float d);

long int lroundl(long double d);

long long int llround (double d);

long long int llroundf(float d);

long long int llroundl(long double d);

 

[引数]

d 整数に丸める値

 

[戻り値]

正常: dを整数値に丸めた値

異常: 範囲エラーの場合は不定

 

[備考]

dの絶対値が大きすぎる場合、範囲エラーが発生する場合があります。

lround関数群はdの値が中間にある場合、その時点の丸め方向とは関係なく0から遠い方向を選んで丸めます。丸めた値がリターン値型の範囲外である場合のリターン値は未規定とします。

 

trunc/ truncf/ truncl

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

 

[指定形式]

#include <math.h>

double trunc(double d);

float truncf(float d);

long double truncl(long double d);

 

[引数]

d 浮動小数点形式の整数に丸める値

 

[戻り値]

dを切り捨てた浮動小数点形式の整数値

 

[備考]

trunc関数群は丸めた値の絶対値がdの絶対値より大きくならないようにします。

 

remainder/ remainderf/ remainderl

浮動小数点数同士の剰余を計算します。

 

[指定形式]

#include <math.h>

double remainder(double d1, double d2) ;

float remainderf(float d1, float d2);

long double remainderl(long double d1, long double d2);

 

[引数]

d1,d2 剰余を求める値 ( d1 / d2 )

 

[戻り値]

d1とd2の剰余値

 

[備考]

remainder関数群の剰余計算はIEEE 60559の規定に沿っています。

 

remquo/ remquof/ remquol

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

 

[指定形式]

#include <math.h>

double remquo(double d1, double d2, long *q);

float remquof(float d1, float d2, long *q);

long double remquol(long double d1, long double d2, long *q);

 

[引数]

d1,d2 整数に丸める値 ( d1 / d2 )

q 剰余計算結果の商を格納する場所を指す値

 

[戻り値]

d1とd2の剰余値

 

[備考]

qに格納される値はx/yと同じ符号と、2n(n は 3 以上の処理系定義整数値)を法とする x/y の整数の商を持ちます。

 

copysign/ copysignf/ copysignl

絶対値がd1に等しく、符号ビットがd2に等しい値を生成します。

 

[指定形式]

#include <math.h>

double copysign(double d1, double d2) ;

float copysignf(float d1, float d2);

long double copysignl(long double d1, long double d2);

 

[引数]

d1 生成する絶対値の値

d2 生成する符号

 

[戻り値]

正常: d1の絶対値、d2の符号の値

異常: 範囲エラーの場合は不定

 

[備考]

copysign関数群はd1が非数の場合d2の符号ビットを持った非数を生成します。

 

nan/ nanf/ nanl

非数を返します。

 

[指定形式]

#include <math.h>

double nan(const char *c)

float nanf(const char *c)

long double nanl(const char *c);

 

[引数]

c 文字列ポインタ

 

[戻り値]

cが示す内容をもつqNaNまたは0(qNaN未サポート時)

 

[備考]

nan("c文字列")の呼出しは、strtod("NAN(c文字列)", (char**) NULL)と等価です。nanf及びnanlの呼出しは、strtof及びstrtoldのそれぞれに対応する呼出しと等価です。

 

nextafter/ nextafterf/ nextafterl

実軸上でd1から見てd2に向かう方向でd1のすぐ次の浮動小数点数表現を計算します。

 

[指定形式]

#include <math.h>

double nextafter(double d1, double d2);

float nextafterf(float d1, float d2);

long double nextafterl(long double d1, long double d2);

 

[引数]

d1 実軸上の浮動小数点値

d2 d1から見て表現可能な浮動小数点値の存在する方向を示す値

 

[戻り値]

正常: 表現可能な浮動小数点値

異常: 範囲エラーの場合、関数に応じて数学的に正しい符号が付与されたHUGE_VAL, HUGE_VALF, HUGE_VALL

 

[備考]

d1がその型で表現できる最大の有限な値であり、かつリターン値が無限大又はその型で表現できない場合、範囲エラーが発生することがあります。

nextafter関数群はd1とd2が等しい場合、d2を返します。

 

nexttoward/ nexttowardf/ nexttowardl

実軸上でd1から見てd2に向かう方向でd1のすぐ次の浮動小数点数表現を計算します。

[指定形式]

#include <math.h>

double nexttoward(double d1, long double d2);

float nexttowardf(float d1, long double d2);

long double nexttowardl(long double d1, long double d2);

 

[引数]

d1 実軸上の浮動小数点値

d2 d1から見て表現可能な浮動小数点値の存在する方向を示す値

 

[戻り値]

正常: 表現可能な浮動小数点値

異常: 範囲エラーの場合、関数に応じて数学的に正しい符号が付与されたHUGE_VAL, HUGE_VALF, HUGE_VALL

 

[備考]

d1がその型で表現できる最大の有限な値であり、かつリターン値が無限大又はその型で表現できない場合、範囲エラーが発生することがあります。

nexttoward関数群はd2の値がlong doubleであり、d1とd2が等しい場合はd2を関数に応じて変換して返すという点以外はnextafter関数群と等価です。

 

fdim/ fdimf/ fdiml

2引数間の正の差分を求めます。

 

[指定形式]

#include <math.h>

double fdim(double d1, double d2);

float fdimf(float d1, float d2);

long double fdiml(long double d1, long double d2);

 

[引数]

d1,d2 正の差を求める値 ( |d1 - d2| )

 

[戻り値]

正常: 2引数間の正の差分

異常: 範囲エラーの場合はHUGE_VAL, HUGE_VALF, HUGE_VALL

 

[備考]

リターン値がオーバーフローした場合に範囲エラーが発生することがあります。

 

fmax/ fmaxf/ fmaxl

2引数の大きい方を求めます。

 

[指定形式]

#include <math.h>

double fmax(double d1, double d2) ;

float fmaxf(float d1, float d2);

long double fmaxl(long double d1, long double d2);

 

[引数]

d1,d2 大きさを比較する値

 

[戻り値]

2引数の大きい方

 

[備考]

fmax関数群は非数を、データが欠けているものとして認識します。一方の引数が非数で、もう一方が数値の場合、数値の値を返します。

 

fmin/ fminf/ fminl

2引数の小さい方を求めます。

 

[指定形式]

#include <math.h>

double fmin(double d1, double d2);

float fminf(float d1, float d2);

long double fminl(long double d1, long double d2);

 

[引数]

d1,d2 大きさを比較する値

 

[戻り値]

2引数の小さい方

 

[備考]

fmin関数群は非数を、データが欠けているものとして認識します。一方の引数が非数で、もう一方が数値の場合、数値の値を返します。

 

fma/ fmaf/ fmal

(d1*d2)+d3を一つの3項演算としてまとめて計算します。

 

[指定形式]

#include <math.h>

double fma(double d1, double d2, double d3) ;

float fmaf(float d1, float d2, float d3);

long double fmal(long double d1, long double d2, long double d3);

 

[引数]

d1, d2, d3 浮動小数点値

 

[戻り値]

(d1*d2)+d3を3項演算としてまとめて計算した結果

 

[備考]

fma関数群は計算結果を無限の精度であるものとして計算し、FLT_ROUNDSの値が示す丸めモードに従って、1回だけ丸めます。