Nous recommandons d’utiliser Visual Studio 2017

_matherr

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Gère les erreurs mathématiques.

  
      int _matherr(  
   struct _exception *except   
);  

Paramètres

à l’exception
Pointeur vers la structure contenant des informations sur l’erreur.

_matherr renvoie la valeur 0 pour indiquer une erreur ou une valeur différente de zéro pour indiquer la réussite. Si _ matherr retourne 0, un message d’erreur peut être affiché et errno est définie sur une valeur d’erreur approprié. Si _ matherr renvoie une valeur différente de zéro, aucun message d’erreur s’affiche et errno reste inchangé.

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

Le _matherr fonction traite les erreurs générées par les fonctions de la bibliothèque de mathématiques à virgule flottante. Ces fonctions appellent _ matherr si une erreur est détectée.

Pour la gestion d’erreur spéciale, vous pouvez fournir une autre définition de _matherr. Si vous utilisez la version de la bibliothèque d’exécution C (Msvcr90.dll) liée de manière dynamique, vous pouvez remplacer la valeur par défaut _ matherr courante dans un fichier exécutable avec une version défini par l’utilisateur du client. Toutefois, vous ne pouvez pas remplacer la valeur par défaut _matherr routine dans un client DLL Msvcr90.dll.

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

type int
Type d’exception.

char *nom
Nom de la fonction où l’erreur s’est produite.

Double arg1, arg2
Premier et second (le cas échéant) les arguments à la fonction.

retval double
Valeur à retourner par la fonction.

Le type Spécifie le type d’erreur mathématique. C’est une des valeurs suivantes, définies dans Math.h.

_DOMAIN
Erreur de domaine argument.

_SING
Singularité de l’argument.

_OVERFLOW
Erreur de plage de dépassement de capacité.

_PLOSS
Perte partielle de l’argument précision.

_TLOSS
Perte complète de signification.

_UNDERFLOW
Le résultat est trop petit pour être représenté. (Cette condition ne prend pas en charge.)

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

La valeur par défaut retourne la valeur de l’erreur donné est retval. Si vous modifiez la valeur de retour, il doit spécifier si une erreur s’est effectivement produit.

RoutineEn-tête requis
_matherr<math.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility dans l’introduction.

Toutes les versions des bibliothèques Runtime 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 */  
}  

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  

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Prise en charge de virgule flottante
Long Double

Afficher: