다음을 통해 공유


_matherr

수학적 오류들을 처리합니다.

int _matherr( 
   struct _exception *except  
);

매개 변수

  • except
    오류 정보를 포함하는 구조체에 대한 포인터입니다.

반환 값

_matherr 성공임을 나타내기 위해 0이 아닌 값, 혹은 오류를 나타내기 위해 0을 반환합니다. 만일 _matherr 가 0을 반환하면, 오류 메시지는 표시될 수 있고 errno 는 적합한 오류 값으로 설정됩니다. 만일 _matherr 이 0이 아닌 값을 반환하는 경우, 오류메시지가 표시되지 않고 errno 는 변경되지 않습니다.

이러한 반환 코드 및 기타 반환 코드에 대한 자세한 내용은 _doserrno, errno, _sys_errlist 및 _sys_nerr을 참조하세요.

설명

_Matherr 함수는 math라이브러리의 부동 소수점에 의해 생성된 오류를 처리합니다. 이러한 함수는 오류가 발견된 경우 _matherr 을 호출합니다.

특별한 오류 처리에 대해, matherr 의 다른 정의를 제공할 수 있습니다. 만일 C런타임 라이브러리(Msvcr90.dll)의 동적으로 연결된 버전을 사용하는 경우, 사용자 정의 버전을 사용하여 클라이언트 실행 파일에서 기본 _matherr 루틴을 대체할 수 있습니다. 그러나, Msvcr90.dll 의 DLL 클라이언트에서 기본 _matherr 으로 대체할 수 없습니다.

math 루틴에서 오류가 발생할 때, matherr 는 매개변수로 _exception 형식 구조(Math.h에서 정의된)에 대한 포인터를 사용하여 호출됩니다. 이 exception구조체에는 다음 요소가 포함되어 있습니다.

  • int 형식
    Exception 형식.

  • char *name
    오류가 발생한 함수의 이름입니다.

  • double arg1, arg2
    함수에 대한 첫 번째와 두 번째(있는 경우)인수들 입니다.

  • double retval
    함수로 반환되는 값입니다.

형식 은 math 오류의 형식을 지정합니다. 이것은 다음 값의 하나이고, Math.h에서 정의됩니다.

  • _DOMAIN
    인수 도메인 오류입니다.

  • _SING
    인수 특이성.

  • _OVERFLOW
    오버플로우 범위 오류입니다.

  • _PLOSS
    의미의 부분적인 손실입니다.

  • _TLOSS
    의미의 전체 손실입니다.

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

구조체 멤버 name 은 오류를 야기하는 함수의 이름을 포함하는 null로 끝나는 문자열에 대한 포인터입니다. 구조체 멤버 arg1arg2 는 오류를 발생시키는 값을 지정합니다. (반일 오직 한개의 매개변수만 주어졌다면, 이것은 arg1에 저장됩니다.)

주어진 오류에 대한 기본 반환값은 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