Freigeben über


_fpieee_flt

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