<mathf.h>ではANSI規格規定外の単精度形式の数学関数の宣言とマクロの定義をしています。
各関数はfloat型の実引数を受け取り、float型の値を返します。
関数に入力するパラメータの値が関数内で定義している値の範囲を超えている時、定義域エラーが発生します。この時errnoにはEDOMの値が設定されます。また、関数のリターン値は、処理系定義です。
関数における計算結果がfloat型の値として表せない時には範囲エラーが発生します。この時、errnoにはERANGEの値が設定されます。また、計算結果がオーバフローの時は、正しく計算が行われた時と同様の符号の値をリターン値として返します。逆に計算結果がアンダフローの時は、0をリターン値として返します。
.
.
.
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行目で、逆正弦値を出力します。
範囲エラーが発生するかどうかは、コンパイラによって定まる、浮動小数点型の内部表現形式によって異なります。例えば無限大を値として表現できる内部表現形式を採用している場合、範囲エラーの生じないように<mathf.h>のライブラリ関数を実現することができます。 |
非数を返します。非数の形式は「4.1.5 (5) 浮動小数点型の仕様」を参照してください |
||
errnoにERANGEを設定する関数については、「10.5.6 C標準ライブラリ関数のエラーメッセージ」を参照してください。上記以外は設定しません。 |
||
fmodの戻り値の詳細は、7.4.7 <math.h> fmod / fmodf / fmodlを参照してください。 |