_fpieee_flt
Appelle un gestionnaire d'interruptions défini par l'utilisateur pour les exceptions de virgule flottante IEEE.
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Paramètres
excCode
code d'exception.excInfo
Pointeur vers la structure d'informations sur les exceptions de Windows NT.handler
Pointeur vers la routine de gestionnaire interruptions IEEE de l'utilisateur.
Valeur de retour
la valeur de retour d' _fpieee_flt est la valeur retournée par handler.Fondamentalement, la routine de filtre IEEE peut être utilisée dans à l'exception de la clause d'un mécanisme (SEH) de gestion structurée des exceptions.
Notes
La fonction d' _fpieee_flt appelle un gestionnaire d'interruptions défini par l'utilisateur pour les exceptions de virgule flottante IEEE et lui fournit toutes les informations pertinentes.Cette routine la sert de filtre d'exception dans le mécanisme, qui appelle votre propre gestionnaire d'exceptions IEEE si nécessaire.
La structure d' _FPIEEE_RECORD , définie dans Fpieee.h, contient des informations concernant une exception à virgule flottante IEEE.cette structure est passée au gestionnaire d'interruptions défini par l'utilisateur par _fpieee_flt.
champ de _FPIEEE_RECORD |
Description |
---|---|
unsigned int RoundingMode, unsigned int Precision |
Ces champs contiennent des informations sur l'environnement à virgule flottante survenant au moment où l'exception s'est produite. |
unsigned int Operation |
indique le type d'opération qui a provoqué l'interruption.Si le type est une comparaison (_FpCodeCompare), vous pouvez fournir une des valeurs spéciales d' _FPIEEE_COMPARE_RESULT (comme défini dans Fpieee.h) dans le domaine de Result.Value .le type de conversion (_FpCodeConvert) indique que l'interruption s'est produite pendant une opération à virgule flottante de conversion.Vous pouvez examiner les types d' Operand1 et d'Result pour déterminer le type de conversion qui est tentée. |
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result |
ces structures indiquent les types et les valeurs du résultat et des opérandes proposés : balise d'OperandValidindiquant si la valeur de réponse est valide. type de données d'Formatde la valeur correspondante.Le type de format peut être retourné même si la valeur correspondante n'est pas valide. résultat d'Valueou valeur de données d'opérande. remarque : Operand3 est utilisé uniquement avec les fonctions (IPF) de la famille de processeurs Itanium. |
_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status |
le _FPIEEE_EXCEPTION_FLAGS contient un champ de bits par type d'exception à virgule flottante. Il existe une correspondance entre ces champs et les arguments utilisés pour masquer des exceptions fournies à _controlfp. La signification exacte de chaque bit dépend du contexte : Cause chaque bit d'ensemble indique l'exception particulière qui a été déclenchée. Enableque chaque bit d'ensemble indique que l'exception particulière est actuellement démasquée. Statusque chaque bit d'ensemble indique que l'exception particulière est actuellement en attente.Cela inclut les exceptions qui n'ont pas été contrôlé parce qu'elles ont été masquées par _controlfp. |
En attente les exceptions qui sont des désactivé sont déclenchés lorsque vous les consultez.Cela peut entraîner un comportement indéfini lors de l'utilisation _fpieee_flten tant que filtre d'exceptions.toujours appel _clearfp avant d'activer des exceptions de virgule flottante.
Configuration requise
Fonction |
en-tête requis |
---|---|
_fpieee_flt |
<fpieee.h> |
Pour plus d'informations de compatibilité, consultez compatibilité dans l'introduction.
Exemple
// crt_fpieee.c
// This program demonstrates the implementation of
// a user-defined floating-point exception handler using the
// _fpieee_flt function.
#include <fpieee.h>
#include <excpt.h>
#include <float.h>
#include <stddef.h>
int fpieee_handler( _FPIEEE_RECORD * );
int fpieee_handler( _FPIEEE_RECORD *pieee )
{
// user-defined ieee trap handler routine:
// there is one handler for all
// IEEE exceptions
// Assume the user wants all invalid
// operations to return 0.
if ((pieee->Cause.InvalidOperation) &&
(pieee->Result.Format == _FpFormatFp32))
{
pieee->Result.Value.Fp32Value = 0.0F;
return EXCEPTION_CONTINUE_EXECUTION;
}
else
return EXCEPTION_EXECUTE_HANDLER;
}
#define _EXC_MASK \
_EM_UNDERFLOW + \
_EM_OVERFLOW + \
_EM_ZERODIVIDE + \
_EM_INEXACT
int main( void )
{
// ...
__try {
// unmask invalid operation exception
_controlfp_s(NULL, _EXC_MASK, _MCW_EM);
// code that may generate
// fp exceptions goes here
}
__except ( _fpieee_flt( GetExceptionCode(),
GetExceptionInformation(),
fpieee_handler ) ){
// code that gets control
// if fpieee_handler returns
// EXCEPTION_EXECUTE_HANDLER goes here
}
// ...
}
É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é.