Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ruft einen benutzerdefinierten Traphandler für IEEE-Gleitkommaausnahmen auf.
Syntax
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Parameter
excCode
Ausnahmecode.
excInfo
Zeiger zur Windows NT-Ausnahmeinformationsstruktur
handler
Zeiger zur IEEE-Traphandlerroutine des Benutzers.
Rückgabewert
Der Rückgabewert von _fpieee_flt
ist der Wert, der von handler
zurückgegeben wird. Daher wird die IEEE-Filterroutine möglicherweise in der except-Klausel eines strukturierten Ausnahmebehandlungsmechanismus (SEH) verwendet.
Hinweise
Die _fpieee_flt
-Funktion ruft einen benutzerdefinierten Traphandler für IEEE-Gleitkommaausnahmen auf und stellt ihn mit allen relevanten Informationen bereit. Diese Routine dient als Ausnahmefilter im SEH-Mechanismus, der bei Bedarf einen eigenen IEEE-Ausnahmehandler aufruft.
Die in Fpieee.h definierte _FPIEEE_RECORD
-Struktur enthält Informationen zu einer IEEE-Gleitkommaausnahme. Diese Struktur wird von _fpieee_flt
an den benutzerdefinierten Traphandler übergeben.
_FPIEEE_RECORD-Feld | Beschreibung |
---|---|
RoundingMode Precision |
Diese unsigned int Felder enthalten Informationen zur Gleitkommaumgebung zum Zeitpunkt der Ausnahme. |
Operation |
Dieses unsigned int Feld gibt den Typ des Vorgangs an, der die Falle verursacht hat. Wenn der Typ ein Vergleich ist (_FpCodeCompare ), können Sie einen der speziellen _FPIEEE_COMPARE_RESULT Werte (wie in Fpieee.h definiert) im Feld "Result.Value " angeben. Der Konvertierungstyp (_FpCodeConvert ) gibt an, dass das Trap während einer Gleitkommakonvertierung aufgetreten ist. Mithilfe der Typen Operand1 und Result können Sie den Typ der versuchten Konvertierung bestimmen. |
Operand1 Operand2 Result |
Diese _FPIEEE_VALUE Strukturen geben die Typen und Werte des vorgeschlagenen Ergebnisses und operanden an. Jede Struktur enthält die folgenden Felder:OperandValid - Flag, das angibt, ob der Antwortwert gültig ist.Format - Datentyp des entsprechenden Werts. Der Formattyp kann auch dann zurückgegeben werden, wenn der entsprechende Wert ungültig ist.Value - Ergebnis- oder Operandendatenwert. |
Cause Enable Status |
_FPIEEE_EXCEPTION_FLAGS enthält ein Bitfeld für jeden Gleitkomma-Ausnahmetyp. Es gibt eine Entsprechung zwischen diesen Feldern und den Argumenten, die zum Maskieren der ausnahmen verwendet werden _controlfp . Die genaue Bedeutung der einzelnen Bits hängt vom Kontext ab:Cause - Jedes Set-Bit gibt die bestimmte Ausnahme an, die ausgelöst wurde.Enable - Jedes Set-Bit gibt an, dass die jeweilige Ausnahme zurzeit entmasket ist.Status - Jedes Set-Bit gibt an, dass die bestimmte Ausnahme zurzeit aussteht, einschließlich Ausnahmen, die nicht ausgelöst wurden, weil sie maskiert _controlfp wurden. |
Ausstehende, deaktivierte Ausnahmen werden bei Aktivierung ausgelöst. Diese Ausnahmen können zu nicht definierten Verhaltensweisen führen, wenn _fpieee_flt
sie als Ausnahmefilter verwendet werden. Rufen Sie immer auf, _clearfp
bevor Gleitkomma-Ausnahmen aktiviert werden.
Anforderungen
Funktion | Erforderlicher Header |
---|---|
_fpieee_flt |
<fpieee.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
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
}
// ...
}
Siehe auch
Mathematische Unterstützung und Gleitkommaunterstützung
_control87
, _controlfp
__control87_2
_controlfp_s