Aracılığıyla paylaş


_fpieee_flt

IEEE kayan nokta özel durumları için kullanıcı tanımlı bir yakalama işleyicisi çağırır.

Sözdizimi

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

Parametreler

excCode
Özel durum kodu.

excInfo
Windows NT özel durum bilgisi yapısının işaretçisi.

handler
Kullanıcının IEEE yakalama işleyicisi yordamının işaretçisi.

Dönüş değeri

dönüş değeri _fpieee_flt , tarafından handlerdöndürülen değerdir. Bu nedenle, IEEE filtre yordamı yapılandırılmış bir özel durum işleme (SEH) mekanizmasının except yan tümcesinde kullanılabilir.

Açıklamalar

İşlev, _fpieee_flt IEEE kayan nokta özel durumları için kullanıcı tanımlı bir yakalama işleyicisi çağırır ve tüm ilgili bilgileri sağlar. Bu yordam, gerektiğinde kendi IEEE özel durum işleyicinizi çağıran SEH mekanizmasında bir özel durum filtresi görevi görür.

_FPIEEE_RECORD Fpie.h dosyasında tanımlanan yapı, IEEE kayan nokta özel durumuyla ilgili bilgileri içerir. Bu yapı tarafından _fpieee_fltkullanıcı tanımlı yakalama işleyicisine geçirilir.

_FPIEEE_RECORD alanı Tanım
RoundingMode
Precision
Bu unsigned int alanlar, özel durumun oluştuğu sırada kayan nokta ortamı hakkında bilgi içerir.
Operation Bu unsigned int alan, yakalamaya neden olan işlemin türünü gösterir. Tür bir karşılaştırma ()_FpCodeCompare ise, Result.Value alanındaki özel _FPIEEE_COMPARE_RESULT değerlerden birini (Fpieee.h'de tanımlandığı gibi) sağlayabilirsiniz. Dönüştürme türü (_FpCodeConvert), yakalamanın kayan nokta dönüştürme işlemi sırasında gerçekleştiğini gösterir. Denenen Operand1 dönüştürme türünü belirlemek için ve Result türlerine bakabilirsiniz.
Operand1
Operand2
Result
Bu _FPIEEE_VALUE yapılar, önerilen sonucun ve işlenenlerin türlerini ve değerlerini gösterir. Her yapı şu alanları içerir:

OperandValid - Yanıtlayan değerin geçerli olup olmadığını gösteren bayrak.
Format - Karşılık gelen değerin veri türü. Karşılık gelen değer geçerli olmasa bile biçim türü döndürülebilir.
Value - Sonuç veya işlenen veri değeri.
Cause
Enable
Status
_FPIEEE_EXCEPTION_FLAGS her kayan nokta özel durumu türü için bir bit alanı içerir. Bu alanlar ile için sağlanan _controlfpözel durumları maskelerken kullanılan bağımsız değişkenler arasında bir yazışma vardır. Her bitin tam anlamı bağlama bağlıdır:

Cause - Her küme biti, tetiklenen özel durumu gösterir.
Enable - Her küme biti, belirli bir özel durumun şu anda maskesiz olduğunu gösterir.
Status - Her küme biti, tarafından maskelendikleri _controlfpiçin tetiklenmemiş özel durumları içeren belirli özel durumun şu anda beklemede olduğunu gösterir.

Devre dışı bırakılan bekleyen özel durumlar etkinleştirildiğinde tetiklenir. Bu özel durumlar, özel durum filtresi olarak kullanılırken _fpieee_flt tanımsız davranışa neden olabilir. Kayan nokta özel durumlarını etkinleştirmeden önce her zaman çağır _clearfp .

Gereksinimler

Function Gerekli başlık
_fpieee_flt <fpieee.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

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

   }

   // ...
}

Ayrıca bkz.

Matematik ve kayan nokta desteği
_control87, _controlfp, __control87_2
_controlfp_s