다음을 통해 공유


_matherr

수학 오류를 처리합니다.

int _matherr(
   struct _exception *except 
);

매개 변수

  • 제외 하 고
    오류 정보가 포함 된 구조체에 대 한 포인터입니다.

반환 값

_matherr 오류 또는 성공을 나타내는 0이 아닌 값을 나타내려면 0을 반환 합니다.경우 _matherr 반환 0, 오류 메시지가 표시 하 고 errno 적절 한 오류 값을 설정 합니다.경우 _matherr 0이 아닌 값을 없음 오류 메시지가 표시 됩니다 반환 하 고 errno 는 변경 되지 않습니다.

반환 코드에 대 한 자세한 내용은 _doserrno, errno, _sys_errlist, 및 _sys_nerr.

설명

_Matherr 함수는 부동 소수점 수학 라이브러리 함수에서 생성 된 오류를 처리 합니다.이러한 함수 호출 _matherr 오류가 발견 됩니다.

특별 한 오류 처리에 대 한 _ 정의 제공할 수 있습니다matherr.C 런타임 라이브러리 (Msvcr90.dll)의 동적으로 링크 된 버전을 사용 하는 경우 기본 _는 바꿀 수 있습니다matherr 루틴의 사용자 정의 버전을 실행 하는 클라이언트입니다.그러나 기본값을 대체할 수 없습니다 _matherr Msvcr90.dll 클라이언트 DLL에에서 루틴입니다.

_ 수학 루틴에서 오류가 발생matherr 에 대 한 포인터에 호출 되는 _exception 인수로 구조 (math.h에서 정의 됨)를 입력 합니다._Exception 구조는 다음과 같은 요소가 포함 되어 있습니다.

  • int 형식
    예외 유형입니다.

  • char * 이름
    오류가 발생 한 위치를 함수 이름입니다.

  • double a r g 1, 2가
    첫 번째 및 두 번째 (있는 경우) 인수를 사용 하는 함수입니다.

  • 이중 retval
    이 함수에서 반환 되는 값입니다.

해당 형식 수학 오류 유형을 지정 합니다.Math.h에서 정의 된 다음 값 중 하나입니다.

  • _DOMAIN
    인수 도메인 오류가 발생 했습니다.

  • _SING
    인수 싱입니다.

  • _OVERFLOW
    범위 오류를 오버플로 합니다.

  • _PLOSS
    상위 값 손실 부분입니다.

  • _TLOSS
    전체 상위 값 손실입니다.

  • _UNDERFLOW
    결과가 너무 작아 나타낼 수 있습니다.(이 조건은 현재 지원 되지 않습니다.)

구조체 멤버 이름 오류가 발생 한 함수 이름을 포함 하는 null로 끝나는 문자열에 대 한 포인터입니다.구조체 멤버 a r g 12가 오류를 발생 시키는 값을 지정 합니다.(지정 된 경우에 저장 됩니다 a r g 1입니다.)

기본 반환 값은 특정된 오류에 대 한 retval.반환 값을 변경 하면 실제로 오류가 발생 했는지 여부를 지정 해야 합니다.

요구 사항

루틴

필수 헤더

_matherr

<math.h>

더 많은 호환성 정보를 참조 하십시오. 호환성 소개에서 합니다.

라이브러리

모든 버전의 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 */
}

Output

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. 자세한 내용은 플랫폼 호출 예제.

참고 항목

참조

부동 소수점 지원

Long Double