Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse 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 |
|---|---|
RoundingModePrecision |
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. |
Operand1Operand2Result |
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. |
CauseEnableStatus |
_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 _controlfpwurden. |
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