matherr, _matherr - 数学関数例外ハンドラ

【書式】

#include <math.h>

int matherr(struct exception *x);

double _matherr(int type, char *name, double *arg1, double *arg2,

double r);

【解説】

matherr() は数学関数の実行で発生したエラーを処理するユーザ定義の関数

です。

struct exception型の構造体は<math.h>で次に示すように定義されており、

エラーの種類、発生した関数名、そのパラメタ、デフォルトの関数値が格納

されています。

struct exception {

int type; /* エラーの種類 */

char *name; /* 関数名 */

double arg1; /* 第1パラメタ */

double arg2; /* 第2パラメタ */

double retval; /* 関数値 */

};

エラーの種類は<math.h>で定義されています。

DOMAIN

パラメタが定義域に存在しません

SING

関数の特異点です

OVERFLOW

オーバーフローしました

UNDERFLOW

アンダーフローしました

TLOSS

全体的に桁落ちしました

PLOSS

部分的に桁落ちしました

アプリケーションが独自のmatherr()を用意しておけば、 エラーからの回復

処理を実行することができます。必要な処理を実行した後にmatherr()が1を

返すとエラーメッセージは表示されず、errnoも変更されません。matherr()

が 0 を返したときにはerrnoにはEDOMあるいはERANGEがセットされます。ま

た、typeがDOMAIN, SING, TLOSSのときには対応するエラーメッセージが標

準エラー出力(stderr)に表示されます。

_matherr() は数学関数から呼び出され、 matherr() を呼び出します。

matherr()が0を返してくるとstderrにエラーメッセージを表示するのはこの

関数です。 したがって、数学関数をROM化するときには_matherr()をご自分

で必ず用意してください。

【リターン値】

エラーを処理できたときには0以外を返し、処理できなかったときには0を返

します。

【エラー】

EDOM

パラメタが定義域を超えています

ERANGE

結果が正確に表現できません

【可搬性】

UNIX, DOS窓

【参照】

trig(3M), hyperbolic(3M), exp(3M)

【copyright (c) 安江正樹@東海大学理学部物理学科】