_fpieee_flt
IEEE kayan nokta özel durumlar için kullanıcı tanımlı tuzak işleyicisini çağırır.
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Parametreler
excCode
Özel durum kodu.excInfo
Windows NT özel bilgi yapısı için işaretçi.handler
Kullanıcının IEEE tuzak işleyici yordamı için işaretçi.
Dönüş Değeri
Dönüş değeri _fpieee_flt tarafından döndürülen değeri handler.Bu nedenle, IEEE filtre yordamı içinde kullanılabilir yan tümce yapılandırılmış özel durum işleme (SEH) mekanizması dışında.
Notlar
_fpieee_flt İşlevi IEEE kayan nokta özel durumlar için kullanıcı tanımlı yakalama işleyicisi çağırır ve tüm ilgili bilgiler sağlar.Bu yordamı bir özel durum filtresi gerektiğinde kendi IEEE özel durum işleyicisi çağırır SEH mekanizması olarak görür.
_FPIEEE_RECORD Yapısı, Fpieee.h içinde tanımlanan bir IEEE kayan nokta özel durumu hakkında bilgi içerir.Bu yapı kullanıcı tanımlı yakalama işleyicisi tarafından geçirilen _fpieee_flt.
_FPIEEE_RECORD alanı |
Tanımlama |
---|---|
unsigned int RoundingMode, unsigned int Precision |
Bu alanları özel durum oluştu zaman kayan nokta ortamı hakkında bilgi içerir. |
unsigned int Operation |
Tuzak neden olduğu işlem türünü gösterir.Bir karşılaştırma türündeyse (_FpCodeCompare), özel birini tedarik _FPIEEE_COMPARE_RESULT değerleri (Fpieee.h'de tanımlandığı gibi) Result.Value alan.Dönüştürme türünü (_FpCodeConvert) tuzak bir kayan nokta dönüştürme işlemi sırasında oluştu gösterir.Bakabilirsiniz Operand1 ve Result türleri yapılmaya çalışılan dönüştürme türünü belirlemek için. |
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Result |
Bu yapılar, türleri ve önerilen sonuç ve işlenen değerlerini belirtin: OperandValidYanıt değeri geçerli olup olmadığını gösteren bayrak. FormatKarşılık gelen değerin veri türü.Karşılık gelen değer geçersiz olsa bile biçim türü iade edilmesi. ValueSonuç veya işlenen veri değeri. |
_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status |
_FPIEEE_EXCEPTION_FLAGS kayan nokta özel durumu türü başına bir bit alanı içerir. Bu alanlar ve özel durumlar için sağlanan maskelemek için kullanılan bağımsız değişkenler arasındaki ilişkiyi yok _controlfp. Her bit tam anlamı bağlama bağlıdır: CauseHer bit değerini ayarlayın Sürüldü belirli bir özel durum gösterir. EnableHer bit değerini ayarlayın, belirli özel durum şu anda maskelenmemiş olduğunu gösterir. StatusHer bit değerini ayarlayın, belirli özel durum şu anda beklemede olduğunu gösterir.Buna göre maskelenen çünkü oluşturulduğunda olmayan özel durumlar dahildir _controlfp. |
Devre dışı bırakılan durumlar, etkinleştirdiğinizde ortaya çıkar.Bu kullanırken tanımsız davranışlara neden olabilir _fpieee_flt bir özel durum filtresi olarak.Her zaman Ara _clearfp kayan nokta özel durumları etkinleştirmeden önce.
Gereksinimler
Function |
Gerekli başlık |
---|---|
_fpieee_flt |
<fpieee.h> |
Daha fazla uyumluluk bilgisi için Giriş altındaki Uyumluluk bölümüne bakın.
Ö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
}
// ...
}
.NET Framework Eşdeğeri
Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.