Поделиться через


_fpieee_flt

Вызывает определяемый пользователем и прерываний обработчик исключений для исключений с плавающей запятой стандарта IEEE.

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

Параметры

  • excCode
    Код исключения.

  • excInfo
    Указатель на структуру сведений об исключении Windows NT.

  • handler
    Указатель на процедуру обработчика исключений и прерываний IEEE пользователя.

Возвращаемое значение

Возвращаемое значение _fpieee_flt значение, возвращаемое оператором handler.Таким образом, процедура фильтра IEEE может быть использована в кроме предложения структурированного механизма обработки исключений (SEH).

Заметки

_fpieee_flt определяемые пользователем функция вызывает обработчик исключений и прерываний для исключений с плавающей запятой стандарта IEEE и предоставляет его с всей соответствующие информацией.Эта процедура служит как исключение фильтра в ЕЕ механизм, который вызывает собственный обработчик исключений IEEE при необходимости.

_FPIEEE_RECORD структура, указанная в Fpieee.h, содержащий сведения, относящиеся к исключения с плавающей запятой стандарта IEEE.Эта структура передается определенный пользователем обработчик исключений и прерываний by _fpieee_flt.

Поле _FPIEEE_RECORD

Описание

unsigned int RoundingMode, unsigned int Precision

Эти поля содержат сведения о среде с плавающей запятой в момент возникновения исключения.

unsigned int Operation

Указывает тип операции, вызвавшего нажатие.Если тип сравнения (_FpCodeCompare), можно использовать один из специальный _FPIEEE_COMPARE_RESULT value (как указано в Fpieee.h) Result.Value поле.Тип преобразования (_FpCodeConvertловушка) указывает на то, что произошла во время операции преобразования с плавающей запятой.Можно найти Operand1 иResult типы, чтобы определить тип, пытанными преобразования.

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result

Эти структуры указывают типы и значения предлагаемых результата и операндов:

OperandValid   Пометить указывающее, является ли отвечающий значение допустимо.

Format   Тип данных соответствующие значения.Тип формата может быть возвращен даже если соответствующий значение недопустимо.

Value   Значение данных результата или операнда.

Примечание. Operand3 использует только с функциями Itanium processor family (IPF).

_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status

_FPIEEE_EXCEPTION_FLAGS содержит один бит в поле тип исключения с плавающей запятой.

Корреспонденция между этими полями и аргументами, используемых в маске, передаваемые в исключения _controlfp.

Явная значение каждого контекста зависит от того, бита:

Cause   Каждый бит набора отображает указанное исключение, возникшее.

Enable   Каждый бит набора указывает, что заданное исключение в настоящее время демаскировано.

Status   Каждый бит набора указывает, что заданное исключение в настоящее время ожидание.Сюда входят исключения, которые не были созданы так как они были замаскированы by _controlfp.

Ожидающие исключений, отключенный вызывать при включении их.Это может привести к появлению неназначенной расширения функциональности при использовании _fpieee_fltв фильтр.Всегда вызов _clearfp перед включением исключения с плавающей запятой.

Требования

Функция

Обязательный заголовок

_fpieee_flt

<fpieee.h>

Дополнительные сведения о совместимости см. Совместимость во введении.

Пример

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

Неприменимо. Для c# используйте стандартная функция PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Поддержка чисел с плавающей запятой

_control87, _controlfp, __control87_2

_controlfp_s