_status87
, _statusfp
, _statusfp2
Mendapatkan kata status floating-point.
Sintaks
unsigned int _status87( void );
unsigned int _statusfp( void );
void _statusfp2(unsigned int *px86, unsigned int *pSSE2)
Parameter
px86
Alamat ini diisi dengan kata status untuk unit titik mengambang x87.
pSSE2
Alamat ini diisi dengan kata status untuk unit floating-point SSE2.
Nilai hasil
Untuk _status87
dan _statusfp
, bit dalam nilai yang dikembalikan menunjukkan status floating-point. Lihat FLOAT. H menyertakan file untuk definisi bit yang dikembalikan oleh _statusfp
. Banyak fungsi pustaka matematika memodifikasi kata status floating-point, dengan hasil yang tidak dapat diprediksi. Pengoptimalan dapat menyusun ulang, menggabungkan, dan menghilangkan operasi floating-point di sekitar panggilan ke _status87
, _statusfp
, dan fungsi terkait. Gunakan opsi pengkompilasi /Od (Nonaktifkan (Debug)) atau fenv_access
arahan pragma untuk mencegah pengoptimalan yang menyusun ulang operasi floating-point. Mengembalikan nilai dari _clearfp
dan _statusfp
, dan juga parameter pengembalian , lebih dapat diandalkan _statusfp2
jika lebih sedikit operasi floating-point dilakukan antara status yang diketahui dari kata status floating-point.
Keterangan
Fungsi ini _statusfp
mendapatkan kata status floating-point. Kata status adalah kombinasi dari status prosesor floating-point dan kondisi lain yang terdeteksi oleh handler pengecualian titik mengambang—misalnya, luapan tumpukan floating-point dan underflow. Pengecualian yang tidak dimasak diperiksa sebelum konten kata status dikembalikan. Dengan kata lain, penelepon diberitahu tentang pengecualian yang tertunda. Pada platform x86, _statusfp
mengembalikan kombinasi status floating-point x87 dan SSE2. Pada platform x64, status yang dikembalikan didasarkan pada status MXCSR SSE. Pada platform ARM64, _statusfp
mengembalikan status dari register FPSCR.
_statusfp
adalah versi portabel platform independen dari _status87
. Ini identik dengan _status87
pada platform Intel (x86) dan juga didukung oleh platform x64 dan ARM64. Untuk memastikan bahwa kode floating-point Anda portabel untuk semua arsitektur, gunakan _statusfp
. Jika Anda hanya menargetkan platform x86, Anda dapat menggunakan _status87
atau _statusfp
.
Kami merekomendasikan _statusfp2
untuk chip (seperti Pentium IV) yang memiliki prosesor titik mengambang x87 dan SSE2. Untuk _statusfp2
, alamat diisi dengan menggunakan kata status floating-point untuk prosesor titik mengambang x87 atau SSE2. Untuk chip yang mendukung prosesor floating-point x87 dan SSE2, EM_AMBIGUOUS
diatur ke 1 jika _statusfp
atau _controlfp
digunakan dan tindakannya ambigu karena dapat merujuk ke kata status titik mengambang x87 atau SSE2. Fungsi _statusfp2
ini hanya didukung pada platform x86.
Fungsi-fungsi ini tidak berguna untuk /clr (Common Language Runtime Compilation) karena runtime bahasa umum (CLR) hanya mendukung presisi floating-point default.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_status87 , _statusfp , _statusfp2 |
<float.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_statusfp.c
// Build by using: cl /W4 /Ox /nologo crt_statusfp.c
// This program creates various floating-point errors and
// then uses _statusfp to display messages that indicate these problems.
#include <stdio.h>
#include <float.h>
#pragma fenv_access(on)
double test( void )
{
double a = 1e-40;
float b;
double c;
printf("Status = 0x%.8x - clear\n", _statusfp());
// Assignment into b is inexact & underflows:
b = (float)(a + 1e-40);
printf("Status = 0x%.8x - inexact, underflow\n", _statusfp());
// c is denormal:
c = b / 2.0;
printf("Status = 0x%.8x - inexact, underflow, denormal\n",
_statusfp());
// Clear floating point status:
_clearfp();
return c;
}
int main(void)
{
return (int)test();
}
Status = 0x00000000 - clear
Status = 0x00000003 - inexact, underflow
Status = 0x00080003 - inexact, underflow, denormal
Baca juga
Dukungan matematika dan titik mengambang
_clear87
, _clearfp
_control87
, _controlfp
, __control87_2
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