Partager via


_matherr

Gère les erreurs mathématiques.

int _matherr(
   struct _exception *except 
);

Paramètres

  • sauf
    Pointeur vers la structure contenant les informations sur l'erreur.

Valeur de retour

_matherr retourne 0 pour indiquer une erreur ou une valeur différente de zéro pour indiquer le succès.Si le _matherr retourne 0, un message d'erreur peut s'afficher et errno a une valeur d'erreur appropriée.Si le _matherr retourne une valeur différente de zéro, aucun message d'erreur n'est affiché et errno reste inchangé.

Pour plus d'informations sur les codes de retour, consultez _doserrno, errno, _sys_errlist, et _sys_nerr.

Notes

Les erreurs de processus de fonction dematherr _générées par les fonctions à virgule flottante de la bibliothèque mathématique._matherr d'appel de ces fonctions lorsqu'une erreur est détectée.

Pour la gestion des erreurs spéciale, vous pouvez fournir une définition différente _matherr.Si vous utilisez la version liée dynamiquement de la bibliothèque Runtime C (Msvcr90.dll), vous pouvez remplacer la routine par défaut dematherr _dans un exécutable client par une version définie par l'utilisateur.Toutefois, vous ne pouvez pas remplacer la routine par défaut d' _matherr dans un client de DLL Msvcr90.dll.

Lorsqu'une erreur se produit dans une routine de mathématiques, _matherr est appelé avec un pointeur vers une structure de type de _exception (définie dans Math.h) comme argument.la structure de _exception contient les éléments suivants.

  • type int
    type d'exception.

  • *name char
    Nom de la fonction dans laquelle l'erreur s'est produite.

  • double arg1, arg2
    Le premier et le second (le cas échéant) arguments de la fonction.

  • double retval
    valeur à retourner par la fonction.

type spécifie le type d'erreur mathématiques.elle est l'une des valeurs suivantes, défini dans Math.h.

  • _DOMAIN
    erreur de domaine argument.

  • _SING
    singularité d'argument.

  • _OVERFLOW
    erreur sur domaine de dépassement supérieur.

  • _PLOSS
    Perte partielle de pondération.

  • _TLOSS
    Perte complète de signification.

  • _UNDERFLOW
    Le résultat est trop grand pour être représenté.(Cette condition n'est pas prise en charge actuellement.)

Le membre de structure nom est un pointeur vers une chaîne terminée par le caractère NULL contenant le nom de la fonction qui a provoqué l'erreur.Les membres de structures arg1 et arg2 spécifient les valeurs qui a provoqué l'erreur.(Si un seul argument est fourni, il est stocké dans arg1.)

La valeur de retour par défaut pour l'erreur données sont retval.si vous modifiez la valeur de retour, elle doit spécifier si une erreur s'est produite réellement.

Configuration requise

routine

en-tête requis

_matherr

<math.h>

Pour plus d'informations de compatibilité, consultez compatibilité dans l'introduction.

bibliothèques

toutes les versions de Bibliothèques runtime C.

Exemple

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

Sortie

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

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' exemples d'appel de code non managé.

Voir aussi

Référence

Support à virgule flottante

Long double