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