Freigeben über


_fpieee_flt

Ruft einen benutzerdefinierten Traphandler für IEEE-Gleitkommaausnahmen auf.

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

unsigned int RoundingMode, unsigned int Precision

Diese Felder enthalten Informationen zur Gleitkommaumgebung zu dem Zeitpunkt, als die Ausnahme auftrat.

unsigned int Operation

Gibt den Typ des Vorgangs an, der das Trap verursacht hat. Wenn der Typ ein Vergleich (_FpCodeCompare) ist, können Sie einen der speziellen _FPIEEE_COMPARE_RESULT-Werte (wie in Fpieee.h definiert) im Result.Value-Feld angeben. Der Konvertierungstyp (_FpCodeConvert) gibt an, dass das Trap während einer Gleitkommakonvertierung aufgetreten ist. Sie können die Operand1- und Result-Typen verwenden, um den Typ der versuchten Konvertierung zu bestimmen.

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Result

Diese Strukturen geben die Typen und Werte des vorgeschlagenen Ergebnisses und der Operanden an:

OperandValid   Kennzeichen, das angibt, ob der Reaktionswert gültig ist.

Format   Datentyp des entsprechenden Werts. Der Formattyp kann zurückgegeben werden, wenn der entsprechende Wert ungültig ist.

Value   Ergebnis- oder Operandendatenwert.

_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 verwendet werden, um die für _controlfp bereitgestellten Ausnahmen zu maskieren.

Die genaue Bedeutung der einzelnen Bits hängt vom Kontext ab:

Cause   Jedes festgelegte Bit gibt die bestimmte Ausnahme an, die ausgelöst wurde.

Enable   Jedes festgelegte Bit gibt an, dass die bestimmte Ausnahme zurzeit nicht maskiert ist.

Status   Jedes festgelegte Bit gibt an, dass die bestimmte Ausnahme zurzeit aussteht. Dies schließt Ausnahmen ein, die nicht ausgelöst wurden, da sie von _controlfp maskiert wurden.

Ausstehende, deaktivierte Ausnahmen werden bei Aktivierung ausgelöst. Dies kann zu einem nicht definierten Verhalten führen, wenn _fpieee_flt als Ausnahmefilter verwendet wird. Rufen Sie vor der Aktivierung von Gleitkommaausnahmen immer _clearfp auf.

Anforderungen

Funktion

Erforderlicher Header

_fpieee_flt

<fpieee.h>

Weitere Informationen zur Kompatibilität finden Sie unter 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. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Gleitkommaunterstützung

_control87, _controlfp, __control87_2

_controlfp_s