_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 _statusfp2jika 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