_fpieee_flt
Memanggil handler trap yang ditentukan pengguna untuk pengecualian titik mengambang IEEE.
Sintaks
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Parameter
excCode
Kode pengecualian.
excInfo
Penunjuk ke struktur informasi pengecualian Windows NT.
handler
Arahkan ke rutinitas penangan jebakan IEEE pengguna.
Nilai hasil
Nilai yang dikembalikan adalah _fpieee_flt
nilai yang dikembalikan oleh handler
. Dengan demikian, rutinitas filter IEEE dapat digunakan dalam klausul pengecualian mekanisme penanganan pengecualian terstruktur (SEH).
Keterangan
Fungsi ini _fpieee_flt
memanggil handler trap yang ditentukan pengguna untuk pengecualian titik mengambang IEEE dan menyediakannya dengan semua informasi yang relevan. Rutinitas ini berfungsi sebagai filter pengecualian dalam mekanisme SEH, yang memanggil handler pengecualian IEEE Anda sendiri jika diperlukan.
Struktur _FPIEEE_RECORD
, yang didefinisikan dalam Fpieee.h, berisi informasi yang berkaitan dengan pengecualian titik mengambang IEEE. Struktur ini diteruskan ke handler trap yang ditentukan pengguna oleh _fpieee_flt
.
bidang _FPIEEE_RECORD | Deskripsi |
---|---|
RoundingMode Precision |
Bidang-bidang ini unsigned int berisi informasi tentang lingkungan floating-point pada saat pengecualian terjadi. |
Operation |
Bidang ini unsigned int menunjukkan jenis operasi yang menyebabkan perangkap. Jika jenisnya adalah perbandingan (_FpCodeCompare ), Anda dapat menyediakan salah satu nilai khusus _FPIEEE_COMPARE_RESULT (seperti yang didefinisikan dalam Fpieee.h) di bidang Result.Value . Jenis konversi (_FpCodeConvert ) menunjukkan bahwa perangkap terjadi selama operasi konversi floating-point. Anda dapat melihat jenis dan Result untuk menentukan jenis konversi yang sedang dicobaOperand1 . |
Operand1 Operand2 Result |
Struktur ini _FPIEEE_VALUE menunjukkan jenis dan nilai hasil dan operand yang diusulkan. Setiap struktur berisi bidang-bidang ini:OperandValid - Bendera yang menunjukkan apakah nilai respons valid.Format - Jenis data dari nilai yang sesuai. Jenis format mungkin dikembalikan meskipun nilai yang sesuai tidak valid.Value - Nilai data hasil atau operand. |
Cause Enable Status |
_FPIEEE_EXCEPTION_FLAGS berisi bidang bit untuk setiap jenis pengecualian titik pecahan. Ada korespondensi antara bidang-bidang ini dan argumen yang digunakan untuk menutupi pengecualian yang disediakan ke _controlfp . Arti pasti dari setiap bit tergantung pada konteks:Cause - Setiap bit yang ditetapkan menunjukkan pengecualian tertentu yang dimunculkan.Enable - Setiap bit yang ditetapkan menunjukkan bahwa pengecualian tertentu saat ini dibuka kemasannya.Status - Setiap bit yang ditetapkan menunjukkan bahwa pengecualian tertentu saat ini tertunda, yang mencakup pengecualian yang belum dinaikkan karena ditutupi oleh _controlfp . |
Pengecualian tertunda yang dinonaktifkan dinaikkan saat Anda mengaktifkannya. Pengecualian ini dapat mengakibatkan perilaku yang tidak ditentukan saat menggunakan _fpieee_flt
sebagai filter pengecualian. Selalu panggil _clearfp
sebelum mengaktifkan pengecualian titik mengambang.
Persyaratan
Fungsi | Header yang diperlukan |
---|---|
_fpieee_flt |
<fpieee.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// 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
}
// ...
}
Lihat juga
Dukungan matematika dan titik mengambang
_control87
, , _controlfp
__control87_2
_controlfp_s
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk