_matherr
数値演算エラーを処理します。
int _matherr(
struct _exception *except
);
パラメーター
- を除く
含む構造体のエラー情報へのポインター。
戻り値
_matherr でエラーや成功を示すに以外の値を示すように 0 を返します。_matherr が 0 を返す場合エラー メッセージが表示されerrno エラーは適切な値に設定されます。_matherr がゼロ以外の値を返した場合エラー メッセージは表示されずerrno は変更されません。
リターン コードの詳細についてはの _doserrnoerrno_sys_errlist と _sys_nerr を参照してください。
解説
数値演算ライブラリの浮動小数点関数によって生成された現在の関数の matherr プロセスのエラー。エラーが検出されたときにこれらの関数呼び出しの matherr _。
特別なエラー処理のために_matherr の定義を提供できます。C ランタイム ライブラリ (Msvcr90.dll) 動的にリンクされたバージョンを使用する場合ユーザー定義のバージョンとクライアント実行可能ファイルの既定のマークの matherr ルーチンを置き換えることができます。ただしDLL Msvcr90.dll のクライアントの既定の _matherr ルーチンを置き換えることはできません。
エラーで数値演算ルーチンで発生した場合_matherr は _exception の型の構造体へのポインターを引数として (定義) Math.h に呼び出されます。_exception の構造体には次の要素が含まれます。
int 型
例外の種類。char *name
エラーが発生した関数の名前。二重 arg1arg2
関数への 1 番 2 番目の引数 (存在する場合)。二重 retval
関数がを返す値。
種類 は数値演算エラーの種類を指定します。次の値の 1 にMath.h で定義されます。
_DOMAIN
引数ドメイン エラー。_SING
引数不適切です。_OVERFLOW
オーバーフローの範囲エラー。_PLOSS
重要度の部分が。_TLOSS
説明全体が。_UNDERFLOW
結果は表されるには小さすぎるです。(この条件は現在サポートされていません。)
構造体メンバー 名前 はエラーが発生した関数の名前を含む null で終わる文字列へのポインターです。構造体メンバー arg1 と arg2 はエラーが発生した値を指定します。1 個の引数を指定した場合 (arg1 に格納されます)。
特定のエラーの既定の戻り値は retval です。戻り値を変更すると実際にエラーが発生したかどうかを指定する必要があります。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_matherr |
<math.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのすべてのバージョン。
使用例
// crt_matherr.c
/* illustrates writing an error routine for math
* functions. The error function must be:
* _matherr
*/
#include <math.h>
#include <string.h>
#include <stdio.h>
int main()
{
/* Do several math operations that cause errors. The _matherr
* routine handles _DOMAIN errors, but lets the system handle
* other errors normally.
*/
printf( "log( -2.0 ) = %e\n", log( -2.0 ) );
printf( "log10( -5.0 ) = %e\n", log10( -5.0 ) );
printf( "log( 0.0 ) = %e\n", log( 0.0 ) );
}
/* Handle several math errors caused by passing a negative argument
* to log or log10 (_DOMAIN errors). When this happens, _matherr
* returns the natural or base-10 logarithm of the absolute value
* of the argument and suppresses the usual error message.
*/
int _matherr( struct _exception *except )
{
/* Handle _DOMAIN errors for log or log10. */
if( except->type == _DOMAIN )
{
if( strcmp( except->name, "log" ) == 0 )
{
except->retval = log( -(except->arg1) );
printf( "Special: using absolute value: %s: _DOMAIN "
"error\n", except->name );
return 1;
}
else if( strcmp( except->name, "log10" ) == 0 )
{
except->retval = log10( -(except->arg1) );
printf( "Special: using absolute value: %s: _DOMAIN "
"error\n", except->name );
return 1;
}
}
printf( "Normal: " );
return 0; /* Else use the default actions */
}
出力
Special: using absolute value: log: _DOMAIN error
log( -2.0 ) = 6.931472e-001
Special: using absolute value: log10: _DOMAIN error
log10( -5.0 ) = 6.989700e-001
Normal: log( 0.0 ) = -1.#INF00e+000
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。