_fpieee_flt

Viene richiamato un gestore di tuttavia definito dall'utente per le eccezioni a virgola mobile IEEE.

int _fpieee_flt( 
   unsigned long excCode,
   struct _EXCEPTION_POINTERS *excInfo,
   int handler(_FPIEEE_RECORD *) 
);

Parametri

  • excCode
    Codice dell'eccezione.

  • excInfo
    Puntatore a una struttura di informazioni sulle eccezioni di Windows NT.

  • handler
    Puntatore alla routine del trappola-gestore dell'IEEE utente.

Valore restituito

il valore restituito di _fpieee_flt è il valore restituito da handler.Di conseguenza, la routine di filtro IEEE potrebbe essere utilizzata in tranne la clausola di un meccanismo (SEH) di gestione delle eccezioni strutturata.

Note

_fpieee_flt la funzione viene richiamato un gestore di tuttavia definito dall'utente per le eccezioni a virgola mobile IEEE e fornisce con tutte le informazioni rilevanti.Questa routine la funge da filtro eccezioni in meccanismo, che richiama possiede il gestore di eccezioni IEEE se necessario.

_FPIEEE_RECORD la struttura, definita in Fpieee.h, contiene informazioni relative alle eccezioni a virgola mobile IEEE.Questa struttura viene passato al gestore di tuttavia definito dall'utente da _fpieee_flt.

campo del _FPIEEE_RECORD

Descrizione

unsigned int RoundingMode, unsigned int Precision

Questi campi sono contenute informazioni sull'ambiente a virgola mobile quando si è verificata l'eccezione.

unsigned int Operation

Indica il tipo di operazione che ha causato la tuttavia.se il tipo è un confronto (_FpCodeCompare), è possibile fornire uno speciale _FPIEEE_COMPARE_RESULT valori (come definito in Fpieee.h) in Result.Value campo.il tipo di conversione (_FpCodeConvert) indica che la tuttavia si è verificata durante un'operazione a virgola mobile di conversione.È possibile esaminare Operand1 eResult tipi per determinare il tipo di conversione che viene tentata.

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result

Queste strutture indicano i tipi e i valori di output e degli operandi proposti:

OperandValid   Contrassegnare indica se il valore di risposta è valido.

Format   Tipo di dati del valore corrispondente.Il tipo di formato potrebbe essere restituito anche se il valore corrispondente non è valido.

Value   Valore di dati degli operandi o di risultato.

nota: Operand3 viene utilizzato solo con funzioni (IPF) della famiglia di processori Itanium.

_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status

il _FPIEEE_EXCEPTION_FLAGS contiene un campo di bit per il tipo di eccezione a virgola mobile.

Esiste una corrispondenza tra questi campi e gli argomenti utilizzati per mascherare eccezioni fornite a _controlfp.

Il significato esatto di ogni frammento dipende dal contesto:

Cause   Ogni frammento impostare indica l'eccezione specifica generata.

Enable   Ogni frammento impostare indica che l'eccezione particolare è attualmente smascherata.

Status   Ogni frammento impostare indica che l'eccezione specifica è attualmente in corso.Sono incluse le eccezioni che non sono state generate in quanto sono state in genere mascherate e da _controlfp.

In attesa delle eccezioni che sono gli disabilitato vengono generati quando vengono attivate.Questo può determinare un comportamento non definito in caso di utilizzo _fpieee_fltcome filtro eccezioni.sempre chiamata _clearfp prima di consentire le eccezioni di virgola mobile.

Requisiti

Funzione

Intestazione di associazione

_fpieee_flt

<fpieee.h>

Per ulteriori informazioni sulla compatibilità, vedere compatibilità nell'introduzione.

Esempio

// 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

   }

   // ...
}

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.

Vedere anche

Riferimenti

Supporto per le operazioni in virgola mobile

_control87, _controlfp, __control87_2

_controlfp_s