7.4.8 <mathf.h>

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

<mathf.h>ではANSI規格規定外の単精度形式の数学関数の宣言とマクロの定義をしています。

各関数はfloat型の実引数を受け取り、float型の値を返します。

 

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

種別

定義名

説明

定数

(マクロ)

EDOM

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

ERANGE

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

 

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

関数

acosf

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

asinf

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

atanf

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

atan2f

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

cosf

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

sinf

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

tanf

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

coshf

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

sinhf

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

tanhf

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

expf

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

frexpf

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

ldexpf

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

logf

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

log10f

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

modff

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

powf

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

sqrtf

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

ceilf

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

fabsf

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

関数

floorf

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

fmodf

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

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

 

(1)

定義域エラー

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

(2)

範囲エラー

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

注 1.

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

.

.

.

1 x=asinf(a);

2 if (errno==EDOM)

3 printf("error\n");

4 else

5 printf("result is : %f\n",x);

.

.

.

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

注 2.

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

 

処理系定義仕様

 

項目

コンパイラの仕様

1

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

非数を返します。非数の形式は4.1.4 (5) 浮動小数点型の仕様を参照してください

2

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

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

3

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

範囲エラーとなります。

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

 

acosf

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

 

[指定形式]

#include <mathf.h>

float acosf(float f);

 

[引数]

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

 

[戻り値]

正常:fの逆余弦値

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

 

[備考]

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

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

 

asinf

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

 

[指定形式]

#include <mathf.h>

float asinf(float f);

 

[引数]

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

 

[戻り値]

正常:fの逆正弦値

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

 

[備考]

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

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

 

atanf

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

 

[指定形式]

#include <mathf.h>

float atanf(float f);

 

[引数]

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

 

[戻り値]

fの逆正接値

 

[備考]

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

 

atan2f

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

 

[指定形式]

#include <mathf.h>

float atan2f(float y, float x);

 

[引数]

x 除数

y 被除数

 

[戻り値]

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

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

 

[備考]

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

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

図 7.2

atan2f関数の意味

 

cosf

(機能)

[指定形式]

#include <mathf.h>

float cosf(float f);

 

[引数]

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

 

[戻り値]

fの余弦値

 

sinf

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

 

[指定形式]

#include <mathf.h>

float sinf(float f);

 

[引数]

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

 

[戻り値]

fの正弦値

 

tanf

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

 

[指定形式]

#include <mathf.h>

float tanf(float f);

 

[引数]

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

 

[戻り値]

fの正接値

 

coshf

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

 

[指定形式]

#include <mathf.h>

float coshf(float f);

 

[引数]

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

 

[戻り値]

fの双曲線余弦値

 

sinhf

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

 

[指定形式]

#include <mathf.h>

float sinhf(float f);

 

[引数]

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

 

[戻り値]

fの双曲線正弦値

 

tanhf

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

 

[指定形式]

#include <mathf.h>

float tanhf(float f)

 

[引数]

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

 

[戻り値]

fの双曲線正接値

 

expf

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

 

[指定形式]

#include <mathf.h>

float expf(float f);

 

[引数]

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

 

[戻り値]

fの指数関数値

 

frexpf

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

 

[指定形式]

#include <mathf.h>

float frexpf(float value, long *exp);

 

[引数]

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

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

 

[戻り値]

valueが0.0の時 :0.0

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

 

[備考]

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

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

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

 

ldexpf

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

 

[指定形式]

#include <mathf.h>

float ldexpf(float e, long f);

 

[引数]

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

f 2のべき乗値

 

[戻り値]

e*2fの演算結果の値

 

logf

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

 

[指定形式]

#include <mathf.h>

float logf(float f);

 

[引数]

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

 

[戻り値]

正常:fの自然対数の値

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

 

[備考]

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

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

 

log10f

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

 

[指定形式]

 

[引数]

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

 

[戻り値]

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

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

 

[備考]

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

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

 

modff

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

 

[指定形式]

#include <mathf.h>

float modff(float a, float *b);

 

[引数]

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

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

 

[戻り値]

aの小数部分

 

powf

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

 

[指定形式]

#include <mathf.h>

float powf(float x, float y);

 

[引数]

x べき乗される値

y べき乗する値

 

[戻り値]

正常:xのy乗の値

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

 

[備考]

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

 

sqrtf

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

 

[指定形式]

#include <mathf.h>

float sqrtf(float f);

 

[引数]

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

 

[戻り値]

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

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

[備考]

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

 

ceilf

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

 

[指定形式]

#include <mathf.h>

float ceilf(float f);

 

[引数]

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

 

[戻り値]

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

 

[備考]

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

 

fabsf

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

 

[指定形式]

#include <mathf.h>

float fabsf(float f);

 

[引数]

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

 

[戻り値]

fの絶対値

 

floorf

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

 

[指定形式]

#include <mathf.h>

float floorf(float f);

 

[引数]

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

 

[戻り値]

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

 

[備考]

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

 

fmodf

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

[指定形式]

#include <mathf.h>

float fmodf(float x, float y);

 

[引数]

x 被除数

y 除数

 

[戻り値]

yの値が0.0の時:x

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

 

[備考]

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

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

また、リターン値retの符号はxの符号と同じ符号になります。

x/yの商を表現できない場合、結果の値は、保証しません。