_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.