_fpieee_flt
Ruft einen benutzerdefinierten Blockier Klassenhandler für IEEE-Gleitkommaausnahmen auf.
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Parameter
excCode
Ausnahmecode.excInfo
Zeiger auf die Windows NT ausnahmeinformationens Struktur.handler
Zeiger auf die das IEEE-Trap Handler Routine des Benutzers.
Rückgabewert
Der Rückgabewert von _fpieee_flt ist der Wert, der von handlerzurückgegeben wurde.Daher würde die IEEE-Filter routine möglicherweise außer - Klausel eines Mechanismus für die strukturierte Ausnahmebehandlung (SEH) verwendet.
Hinweise
Die _fpieee_flt-Funktion ruft einen benutzerdefinierten Blockier Klassenhandler für IEEE-Gleitkommaausnahmen auf und stellt ihn mit allen relevanten Informationen.Diese Routine dient als Ausnahmefilter in IHR Mechanismus, der IEEE-Ausnahmehandler sind bei Bedarf aufruft.
Die _FPIEEE_RECORD Struktur, definiert in Fpieee.h eine Betreffend enthält Informationen IEEE-Gleitkommaausnahme.Diese Struktur wird auf den benutzerdefinierten Handler nach Blockier _fpieee_fltübergeben.
_FPIEEE_RECORD Feld |
Beschreibung |
---|---|
unsigned int RoundingMode, unsigned int Precision |
Diese Felder enthalten Informationen zur Gleitkommaumgebung zum Zeitpunkt des Auslösens der Ausnahme aufgetreten ist. |
unsigned int Operation |
Gibt den Typ des Vorgangs, der das abgefangen verursacht hat.Wenn der Typ ein Vergleich (_FpCodeCompare) beträgt, können Sie einen der speziellen _FPIEEE_COMPARE_RESULT-Werte (z. B. in Fpieee.h definiert) auf dem Result.Value Feld angeben.Der Konvertierungstyp (_FpCodeConvert) gibt an, dass das abgefangen während einer Gleitkommazahl Konvertierungsoperation aufgetreten ist.Sie können die Operand1 und TypenResult berücksichtigen, um den Typ der Konvertierung zu bestimmen, welche versucht wird. |
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result |
Diese Strukturen werden die Typen und Werte der vorgeschlagenen Ergebnisses und der Operanden an: OperandValid Flag, das angibt, ob der Wert für Reaktions gültig ist. FormatDatentyp des entsprechenden Werts.Der Formattyp würden zurückgegeben werden, auch wenn der entsprechende Wert ungültig ist. ValueErgebnis oder Operandendatenwert. Hinweis: Operand3 wird nur bei Funktionen der Itanium-Prozessorfamilie (IPF) verwendet. |
_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status |
_FPIEEE_EXCEPTION_FLAGS enthält ein Bitfeld pro Typ der Gleitkommaausnahme. Es gibt eine Entsprechung zwischen diesen Feldern und den Argumenten, die an die Maske Ausnahmen verwendet werden, die auf _controlfpangegeben werden. Die genaue Bedeutung der einzelnen Bits hängt vom Kontext ab: bitCause jeden Satz gibt die spezifische Ausnahme an, die ausgelöst wurde. bitEnable, das jeden Satz an, dass die spezifische Ausnahme gerade entlarvt wird. bitStatus, das jeden Satz an, dass die spezifische Ausnahme gerade aussteht.Dies schließt, die keine Ausnahmen ausgelöst wurden, da sie von _controlfpmaskiert wurden. |
Zwar sind, werden Ausnahmen ausgelöst Behinderte, wenn Sie sie aktivieren.Darf nicht definiertes Verhalten zur Folge haben, wenn es _fpieee_fltals Ausnahmefilter verwendet.Rufen Sie immer _clearfp , bevor Gleitkommaausnahmen aktiviert sind.
Anforderungen
Funktion |
Erforderlicher Header |
---|---|
_fpieee_flt |
<fpieee.h> |
Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.
Beispiel
// 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
}
// ...
}
.NET Framework-Entsprechung
Nicht zutreffend. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.