_fpieee_flt
IEEE kayan nokta özel durumlar için kullanıcı tanımlı tuzak işleyici başlatı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. Dolayısıyla, IEEE filtre yordamı içinde kullanılabilir yan tümcesi 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ı tuzak işleyici başlatır ve ilgili tüm bilgileri sağlar. Bu yordamı, gerektiğinde kendi IEEE özel durum işleyici başlatır seh mekanizması bir özel durum filtre görevi görür.
_FPIEEE_RECORD Fpieee.h içinde tanımlanan yapı, bir IEEE kayan nokta özel durumu ilgili bilgiler içermektedir. Bu yapı kullanıcı tanımlı Yakalama işleyicisi tarafından geçirilen _fpieee_flt.
_FPIEEE_RECORD alan |
Description |
---|---|
unsigned int RoundingMode, unsigned int Precision |
Bu alanların zaman kayan nokta ortamı hakkında bilgi özel durum oluştu içerir. |
unsigned int Operation |
Tuzak nedeniyle işlem türünü gösterir. Bir karşılaştırma türü ise (_FpCodeCompare), özel sağlayabilir _FPIEEE_COMPARE_RESULT (Fpieee.h'de tanımlandığı gibi) değerleri 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 yapılmaya çalışılan dönüştürme türünü belirlemek için türleri. |
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result |
Bu yapýlar, türleri ve işlenen ve önerilen sonuç değerlerini belirtin: OperandValidYanıt veren değeri geçerli olup olmadığını gösteren bayrak. FormatKarşılık gelen değerin veri türü. Karşılık gelen değeri geçerli olmasa bile, biçim türü iade edilmesi. ValueSonuç veya işlenen veri değeri. Not: Operand3 yalnızca Itanium işlemci ailesi (IPF) işlevleri ile kullanılır. |
_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 için sağlanan özel durumlar maskelemek için kullanılan bağımsız değişkenler arasındaki bir ilişkiyi yok _controlfp. Her bit tam anlamını içeriğine bağlıdır: CauseHer bit değerini ayarlayın Sürüldü belirli özel durumu gösterir. EnableHer bit değerini ayarlayın, belirli özel durumu şu anda çıkarılmış olduğunu gösterir. StatusHer bit değerini ayarlayın, belirli özel durum şu an beklemede olduğunu gösterir. Bu tarafından maskeli çünkü yükseltildiğinde olmayan özel durumlar içerir _controlfp. |
Bunları etkinleştirdiğinizde, devre dışı bırakılan özel durumları üretilir. Bu kullanırken tanımsız davranışlarla sonuçlanabilir _fpieee_flt bir özel durum filtresi olarak. Her zaman _clearfp kayan nokta özel durumları etkinleştirmeden önce.
Gereksinimler
İşlev |
Gerekli başlık |
---|---|
_fpieee_flt |
<fpieee.h> |
Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.
Ö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
Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.