extern int errno; class c_exception { ... }; int complex_error(c_exception&);
複素数ライブラリでは、エラー処理が上のように定義されています。
外部変数 errno は C ライブラリの大域的なエラー状態です。errno は、標準ヘッダー errno.h (perror(3) のマニュアルページを参照) にリストされている値を持ちます。 errno には、多くの関数でゼロ以外の値が設定されます。ある特定の演算でエラーが起こったかどうか調べるには、次のようにしてください。
errno をゼロに設定する。
演算終了後に値を調べる。
関数 complex_error は c_exception 型の参照引数を持ち、次に示す複素数ライブラリ関数に呼び出されます。
exp
log
log10
sinh
cosh
デフォルトの complex_error はゼロを返します。ゼロが返されたということは、デフォルトのエラー処理が実行されたということです。ユーザーは独自の complex_error 関数を作成して、別のエラー処理を行うことができます。エラー処理については、cplexrr(3C++) のマニュアルページで説明しています。
デフォルトのエラー処理については、cplxtrig(3C++) と cplxexp(3C++) のマニュアルページで説明しています。次に概要を示します。
表 2-3 複素数ライブラリ関数
複素数ライブラリ関数 |
デフォルトエラー処理 |
---|---|
exp |
オーバーフローが起こった場合は errno を ERANGE に設定し、最大複素数を返します。 |
log、log10 |
引数がゼロの場合は errno を EDOM に設定し、最大複素数を返します。 |
sinh、cosh |
引数の虚部によりオーバーフローが起こる場合は複素数ゼロを返します。引数の実部によりオーバーフローが起こる場合は最大複素数を返します。どちらの場合も errno は ERANGE に設定されます。 |