Partager via


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

Voir aussi

Référence

Support à virgule flottante

_control87, _controlfp, __control87_2

_controlfp_s