_matherr
Handles math errors.
int _matherr(
struct _exception *except
);
Paramètres
- __except
Pointeur vers une structure contenant des informations sur les messages.
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 ces codes de retour et autres, consultez _doserrno, errno, _sys_errlist et _sys_nerr.
Notes
La fonctionmatherr gère les erreurs généres par les fonctions à virgule flottante de la bibliothèque mathématique. Ces fonctions appellent matherrlorsqu'une erreur est détectée.
Pour la gestion des erreurs particulières, vous pouvez fournir une autre définition de matherr. Si vous utilisez la versiondu lien dynamique ou de la bibliothèque Runtime C (Msvcr90.dll), vous pouvez remplacer la routine par défaut dematherr _dans un fichier exécutable client par une version définie par l'utilisateur. Toutefois, vous ne pouvez pas remplacer la routine par défaut de**_matherr** dans un client de DLL Msvcr90.dll.
Lorsqu'une erreur se produit dans une routine mathématiques, _matherr est appelé avec un pointeur vers une structure de type _exception (définie dans Math.h) comme argument. La structure _exception contient les éléments suivants :
Type : int
Type d'exceptionchar *name
Nom de la fonction où l'erreur s'est produite.double arg1, arg2
Le Premier argument et le second(le cas échéant)à la fonction.double retval
Valeur retournée 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é argument._OVERFLOW
Erreur sur le champ de débordement._PLOSS
Perte partielle d'importance._TLOSS
Perte totale de signification._UNDERFLOW
Le résultat est trop petit pour être représenté. Cette propriété 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 qui contient le nom de la fonction qui a provoqué l'erreur. Les membres de la structure arg1 et arg2 spécifient les valeurs qui ont provoqué l'erreur. (Si un seul argument est fourni, il est stocké dans arg1.)
La valeur renvoyée par défaut de l'erreur est retval. Si vous modifiez la valeur de retour, elle doit spécifier si une erreur a eu lieu.
Configuration requise
Routine |
En-tête requis |
---|---|
_matherr |
<math.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.
Bibliothèques
Toutes les versions des 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 Exemples d'appel de plateforme.