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

Siehe auch

Referenz

Gleitkommaunterstützung

_control87, _controlfp, __control87_2

_controlfp_s