_fpieee_flt
Appelle un gestionnaire Interruptions défini par l'utilisateur pour des 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 à la structure d'informations sur les exceptions Windows NT.handler
Pointeur à la routine de gestionnaire Interruptions IEEE de l'utilisateur.
Valeur de retour
La valeur de retour de _fpieee_flt est la valeur renvoyée par handler. Ainsi, la routine de filtre IEEE peut être utilisée dans la clause d'un mécanisme de (SEH) de gestion structurée des exceptions.
Notes
La fonction _fpieee_flt appelle un gestionnaire d'interruptions défini par l'utilisateur pour des exceptions à virgule flottante IEEE et lui fournit toutes les informations pertinentes. Cette routine sert de filtre d'exceptions dans le mécanisme, qui appelle votre propre gestionnaire d'exceptions IEEE si nécessaire.
La structure _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'un _FPIEEE_COMPARE_RESULT (comme défini dans Fpieee.h) dans le champ Result.Value. Le type de conversion (_FpCodeConvert) indique que l'interruption s'est produite pendant une opération à virgule flottante de conversion. Regardez Operand1 et les types Result pour déterminer le type de conversion qui est tenté. |
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Result |
Ces structures contiennent les types et les valeurs du résultat et des opérandes proposés : OperandValid Indicateur montrant si la valeur de réponse est valide. Format Type de données de la valeur correspondante. Type de format peut être retourné même si la valeur correspondante n'est pas valide. Value Valeur de données de résultat ou d'opérande. |
_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status |
_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 les exceptions fournies dans _controlfp. La signification exacte de chaque bit dépend du contexte : Cause Chaque bit d'ensemble illustre l'exception particulière qui a été déclenchée. Enable Chaque bit d'ensemble indique que l'exception particulière est actuellement démasquée. Status Chaque bit d'ensemble indique que l'exception particulière est actuellement en attente. Cela inclut les exceptions qui n'étaient pas déclenchées car elles ont été masquées par _controlfp. |
Les exceptions en attentes qui sont désactivé sont déclenchés lorsque vous l'extrayez. Cela peut entraîner un comportement non défini en utilisant _fpieee_flt comme filtre d'exceptions. Appelez toujours _clearfp avant d'extraire les exceptions à virgule flottante.
Configuration requise
Fonction |
En-tête requis |
---|---|
_fpieee_flt |
<fpieee.h> |
Pour plus d'informations sur la 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 Exemples d'appel de plateforme.
Voir aussi
Référence
Prise en charge de la virgule flottante