_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