Condividi tramite


_matherr

Gestisce gli errori matematici.

int _matherr(
   struct _exception *except 
);

Parametri

  • salvo
    Puntatore a una struttura contenente informazioni sugli errori.

Valore restituito

_matherr restituisce 0 per indicare un errore o un valore diverso da zero per indicare l'esito positivo.se _matherr restituisce 0, un messaggio di errore che possono essere visualizzati e errno è impostato su un valore di errore appropriato.se _matherr restituisce un valore diverso da zero, non viene visualizzato alcun messaggio di errore e errno rimane invariato.

per ulteriori informazioni sui codici restituiti, vedere _doserrno, errno, _sys_errlist e _sys_nerr.

Note

_matherr errori di processi di funzione generati dalle funzioni a virgola mobile della raccolta matematica._Di chiamata delle funzionimatherr quando viene rilevato un errore.

Per la gestione degli errori speciale, è possibile fornire una definizione diversa di _matherr.Se si utilizza la versione in modo dinamico collegata della libreria di runtime del linguaggio C (Msvcr90.dll), è possibile sostituire predefinito _matherr routine in un eseguibile client con una versione definita dall'utente.Tuttavia, non è possibile sostituire l'oggetto predefinito _matherr routine in un client di DLL Msvcr90.dll.

Quando si verifica un errore in una routine matematiche, _matherr viene chiamato con un puntatore a un oggetto _exception digitare la struttura (definita in Math.h) come argomento._exception la struttura contiene i seguenti elementi.

  • tipo int
    tipo di eccezione.

  • *name char
    Nome della funzione in cui si è verificato l'errore.

  • doppio arg1, arg2
    Primo e il secondo (se presenti) argomenti della funzione.

  • doppio retval
    Valore da restituire dalla funzione.

tipo specifica il tipo di errore matematica.È uno dei seguenti valori, definiti in Math.h.

  • _DOMAIN
    Errore di domini argomento.

  • _SING
    singolarità di argomento.

  • _OVERFLOW
    Errore di timeout di overflow.

  • _PLOSS
    Perdita parziale di significato.

  • _TLOSS
    Perdita totale di significato.

  • _UNDERFLOW
    Il risultato è troppo piccolo per essere rappresentato.(Questa condizione non è attualmente supportati.)

Il membro della struttura nome è un puntatore a una stringa con terminazione null che contiene il nome della funzione che ha provocato l'errore.I membri della struttura arg1 e arg2 specificare i valori che hanno provocato l'errore.(Solo se viene fornito un argomento, è archiviata in arg1).

Il valore restituito predefinito dell'errore specificato è retval.Se si modifica il valore restituito, deve specificare se un errore in realtà si è verificato.

Requisiti

routine

Intestazione di associazione

_matherr

<math.h>

Per ulteriori informazioni sulla compatibilità, vedere compatibilità nell'introduzione.

Librerie

Tutte le versioni di Librerie di runtime del linguaggio C.

Esempio

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

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.

Vedere anche

Riferimenti

Supporto per le operazioni in virgola mobile

Doppio lungo