Partilhar via


_matherr

Manipula os erros de matemática.

int _matherr(
   struct _exception *except 
);

Parâmetros

  • exceto
    Ponteiro para a estrutura que contém informações de erro.

Valor de retorno

_matherr retorna 0 para indicar um erro ou um valor diferente de zero para indicar êxito.If _matherr retorna 0, uma mensagem de erro pode ser exibida e errno é definido como um valor de erro apropriada. If _matherr retorna um valor diferente de zero, nenhuma mensagem de erro é exibido e errno permanece inalterada.

Para obter mais informações sobre códigos de retorno, consulte _doserrno, errno, _sys_errlist e _sys_nerr.

Comentários

The _matherr função processa os erros gerados pelas funções da biblioteca de matemática de ponto flutuante.Essas funções de telefonar _ matherr quando um erro é detectado.

Para tratamento de erro especial, você pode fornecer uma definição diferente de _ matherr.Se você usar a versão vinculada dinamicamente de execução C-time biblioteca (Msvcr90.dll), você pode substituir o padrão _ matherr rotina em um cliente executável com uma versão definida pelo usuário.No entanto, não é possível substituir o padrão de _matherr rotina em um cliente da DLL do Msvcr90.dll.

Quando ocorre um erro em um matemático rotina, _ matherr é chamado com um ponteiro para um _exception digite estrutura (definida em Math.h) sistema autônomo um argumento.The _exception estrutura contém os seguintes elementos.

  • tipo int
    Tipo de exceção.

  • char * nome
    Nome da função onde ocorreu o erro.

  • arg1 duplo, arg2
    Primeiro e segundo (se houver) argumentos à função.

  • retval duplo
    Valor a ser retornado pela função.

The tipo Especifica o tipo de erro de matemática.É um dos seguintes valores definidos no Math.h.

  • _DOMAIN
    Erro de domínio do argumento.

  • _SING
    Argumento singularity.

  • _OVERFLOW
    Erro de intervalo de estouro.

  • _PLOSS
    Uma perda parcial de significância.

  • _TLOSS
    Perda total de significância.

  • _UNDERFLOW
    O resultado é muito pequeno para ser representado.(Essa condição não é atualmente suportada.)

A estrutura membro nome é um ponteiro para uma cadeia terminada com nulo que contém o nome da função que causou o erro.A estrutura membros arg1 and arg2 especifique os valores que causou o erro.(Se apenas um argumento for fornecido, ele é armazenado em arg1.)

Retornar o padrão valor para o erro específico é retval.Se você alterar o valor retornado, ele deve especificar se realmente ocorreu um erro.

Requisitos

Rotina

Cabeçalho necessário

_matherr

<math.h>

Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.

Bibliotecas

Todas as versões do C em time de execução bibliotecas.

Exemplo

// 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 */
}

Saída

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

Equivalente do NET Framework

Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Suporte de ponto flutuante

Double longo