_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 handler
dö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_flt
kullanıcı tanımlı yakalama işleyicisine geçirilir.
_FPIEEE_RECORD alanı | Açıklama |
---|---|
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 _controlfp iç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
İşlev | 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