マニュアルページ cplxerr.3
名前
cplxerr - complex error - C++ 複素数数学ライブラリのエラー処
理関数
形式
#include <complex.h>
class complex { ... };
static const complex complex_zero(0.0, 0.0);
const int SING = ...;
const int OVERFLOW = ...;
const int UNDERFLOW = ...;
class c_exception
{
public:
c_exception(char *n, const complex& a1, const complex& a2=complex_zero);
c_exception(unsigned char *n, const complex& a1, const complex& a2=complex_zero);
friend int complex_error(c_exception&); // 上書き可能
private:
int type;
char *name;
complex arg1, arg2;
complex retval;
};
機能説明
関 数 exp()、 log()、 log10()、 sinh()、 cosh() は、
cplxexp(3C++) と cplxtrig(3C++) で説明されている条件で関数
complex_error() を呼び出します。 complex_error() がゼロを 返
す と、説明にあるように戻り値と errno の設定が行われます。さ
らに、エラーの種類を示すメッセージ、そのエラーを検出し た 関
数、エラーの原因となった値が cerr に書き込まれます (入出力ス
トリームのドキュメントを参照)。 complex_error がゼロ以外の値
を 返した場合は、 errno の設定とメッセージの書き込みは行われ
ません。
complex_error() は、デフォルトではゼロを返すだけです。プログ
ラ マ は、この関数の代替バージョンを用意するだけで必要なアク
ションを行うようにすることができま す。 complex_error() は
c_exception のフレンド関数で、「 c_exception への参照」型の
パラメタを 1 つとります。
クラス c_exception
このクラスは、次のフィールドから構成されます。
int type
値の型を表す整数。ヘッダ内で定数として宣言され、次の い
ずれかの値をとります。
SING ゼロ除算などの、引数異常
OVERFLOW オーバーフロー範囲エラー
UNDERFLOW アンダーフロー範囲エラー
char* name
エラーが検出された関数の名前を表す NULL で終わる文字 列
を指すポインタ。
complex arg1, arg2
エラーを検出した関数の呼び出し時に指定さ れ た 引 数 (
complex_err() を呼び出す関数は引数を 1 つしかとらないた
め、 arg2 は使用しないでください)。
complex retval
complex_err() が他の値を設定しない場合に使用する呼び 出
し側関数のデフォルトの戻り値。
complex_err() の代替バージョンを作成する場合、 errno の設 定
と cerr への書き込みが必要なときにはゼロ、それ以外の場合には
ゼロ以外の値を返すようにしてください。デフォルトの戻り値を変
更 したい場合は、パラメタ c_exception の retval フィールドを
変更することもできます。
使用例
errno の設定は行わずに、 cerr (または他の場所) への書き込 み
だ けを行う場合を考えます。次に示す関数 ( complex_err() の代
替バージョン) はゼロ以外の値を返します。そのため、メッセージ
の 書き込みは行われません。ただし、 errno の設定も行われなく
なってしまうため、それを自分で行なっています。
#include <complex.h>
int c_exception(c_exception& x)
{
switch( x.type ) {
case UNDERFLOW:
case OVERFLOW:
errno = ERANGE;
break;
case SING:
errno = EDOM;
break;
}
return 1;
}
関連項目
cplx.intro(3C++), cartpol(3C++), cplxexp(3C++),
cplxops(3C++), cplxtrig(3C++), intro(2), Ios.intro(3C++)
『C++ ライブラリ・リファレンス』の第 2 章「複素数ライブラ
リ」