Udostępnij za pośrednictwem


_fpieee_flt

Wywołuje obsługi użytkownika pułapki dla IEEE zmiennoprzecinkowych wyjątki.

int _fpieee_flt( 
   unsigned long excCode,
   struct _EXCEPTION_POINTERS *excInfo,
   int handler(_FPIEEE_RECORD *) 
);

Parametry

  • excCode
    Wyjątek w kodzie.

  • excInfo
    Wskaźnik do struktury informacji wyjątek systemu Windows NT.

  • handler
    Wskaźnik do procedury obsługi pułapki IEEE użytkownika.

Wartość zwracana

Wartość zwracaną przez _fpieee_flt jest wartością zwróconą przez handler.Jako takie, IEEE rutynowych filtr może być używany w z wyjątkiem klauzula structured mechanizm obsługi wyjątków (strukturalnej obsługi wyjątków).

Uwagi

_fpieee_flt Funkcja wywołuje obsługi użytkownika pułapki dla IEEE zmiennoprzecinkowych wyjątki i zawiera on wszystkie istotne informacje.Ta procedura służy jako filtru wyjątków w mechanizmie strukturalnej obsługi wyjątków, które wywołuje własne IEEE Obsługa wyjątków, gdy jest to konieczne.

_FPIEEE_RECORD Strukturę, zdefiniowaną w Fpieee.h, zawiera informacje dotyczące wyjątek zmiennoprzecinkowych IEEE.Ta struktura jest przekazywana do obsługi użytkownika pułapki przez _fpieee_flt.

Pole _FPIEEE_RECORD

Opis

unsigned int RoundingMode, unsigned int Precision

Te pola zawierają informacje o środowisku zmiennoprzecinkowych w czasie Wystąpił wyjątek.

unsigned int Operation

Wskazuje typ operacji, która spowodowała nadlewki i podlewki.Jeśli typem jest porównanie (_FpCodeCompare), można podać jeden z specjalne _FPIEEE_COMPARE_RESULT wartości (jak określono w Fpieee.h) w Result.Value pole.Typ konwersji (_FpCodeConvert) wskazuje, że sidła wystąpił podczas operacji zmiennoprzecinkowych konwersji.Zapoznanie się z Operand1 i Result typy, aby określić typ konwersji prób.

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Result

Te struktury wskazują typy oraz wartości wyniku proponowanego i operandów:

OperandValidFlaga wskazująca, czy odpowiada wartość jest nieprawidłowa.

FormatTyp danych odpowiedniej wartości.Typ formatu może być zwracane, nawet jeśli odpowiadająca jej wartość nie jest prawidłowa.

ValueWynik lub argument wartości danych.

_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status

_FPIEEE_EXCEPTION_FLAGS zawiera pole jeden bit na typ wyjątku ruchomy punkt.

Istnieje związek między te pola i argumenty używane do maskowania wyjątki dostarczane do _controlfp.

Dokładne znaczenie każdego bitu zależy od kontekstu:

CauseKażdy ustawiony bit wskazuje określonego wyjątku, który został podniesiony.

EnableKażdy ustawiony bit wskazuje, że określonego wyjątku jest aktualnie zaznaczona.

StatusKażdy ustawiony bit wskazuje, że określonego wyjątku jest obecnie oczekuje na realizację.Wartość ta obejmuje wyjątki, które nie były hodowane, ponieważ były one maskowane przez _controlfp.

Do czasu wyjątków, które są wyłączone są wywoływane, gdy zostanie włączone.Może to spowodować niezdefiniowane zachowanie podczas korzystania z _fpieee_flt jako filtru wyjątków.Wywoływanie zawsze _clearfp przed włączeniem ruchomy punkt wyjątki.

Wymagania

Funkcja

Wymagany nagłówek

_fpieee_flt

<fpieee.h>

Aby uzyskać więcej informacji na temat zgodności, zobacz Zgodność we Wstępie.

Przykład

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

   }

   // ...
}

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywoływania platformy.

Zobacz też

Informacje

Obsługa liczb zmiennoprzecinkowych

_control87, _controlfp, __control87_2

_controlfp_s