_status87
, _statusfp
, _statusfp2
Kayan nokta durum sözcüğünü alır.
Sözdizimi
unsigned int _status87( void );
unsigned int _statusfp( void );
void _statusfp2(unsigned int *px86, unsigned int *pSSE2)
Parametreler
px86
Bu adres, x87 kayan nokta biriminin durum sözcüğüyle doldurulur.
pSSE2
Bu adres, SSE2 kayan nokta biriminin durum sözcüğüyle doldurulur.
Dönüş değeri
ve _statusfp
için_status87
, döndürülen değerdeki bitler kayan nokta durumunu gösterir. Bkz. FLOAT. tarafından _statusfp
döndürülen bitlerin tanımı için H ekleme dosyası. Birçok matematik kitaplığı işlevi, kayan nokta durum sözcüğünü tahmin edilemeyen sonuçlarla değiştirir. İyileştirme, , _statusfp
ve ilgili işlevlere _status87
yapılan çağrılar etrafında kayan nokta işlemlerini yeniden sıralayabilir, birleştirebilir ve ortadan kaldırabilir. Kayan nokta işlemlerini yeniden sıralayan iyileştirmeleri önlemek için /Od (Devre Dışı Bırak (Hata Ayıklama)) derleyici seçeneğini veya fenv_access
pragma yönergesini kullanın. kayan nokta durum sözcüğünün bilinen durumları arasında daha az kayan nokta işlemi gerçekleştirilirse ve _statusfp
'den _clearfp
değer döndürme ve ayrıca dönüş parametreleri _statusfp2
daha güvenilirdir.
Açıklamalar
_statusfp
işlevi kayan nokta durum sözcüğünü alır. Durum sözcüğü kayan nokta işlemci durumunun ve kayan nokta özel durum işleyicisi tarafından algılanan diğer koşulların (örneğin, kayan nokta yığın taşması ve taşma) birleşimidir. Durum sözcüğünün içeriği döndürülmeden önce maskelenmemiş özel durumlar denetleniyor. Başka bir deyişle, arayan bekleyen özel durumlar hakkında bilgilendirilir. x86 platformlarında, _statusfp
x87 ve SSE2 kayan nokta durumunun bir bileşimini döndürür. x64 platformlarında, döndürülen durum SSE'nin MXCSR durumunu temel alır. ARM64 platformlarında, _statusfp
FPSCR yazmaçtan durum döndürür.
_statusfp
platformdan bağımsız, taşınabilir bir sürümüdür _status87
. _status87
Intel (x86) platformlarında aynıdır ve x64 ve ARM64 platformları tarafından da desteklenir. Kayan nokta kodunuzun tüm mimarilere taşınabilir olduğundan emin olmak için kullanın _statusfp
. Yalnızca x86 platformlarını hedeflediyseniz veya _statusfp
kullanabilirsiniz_status87
.
Hem x87 hem de SSE2 kayan nokta işlemciye sahip yongalar (Pentium IV gibi) için önerilir _statusfp2
. için _statusfp2
, adresler hem x87 hem de SSE2 kayan nokta işlemcisi için kayan nokta durum sözcüğü kullanılarak doldurulur. x87 ve SSE2 kayan nokta işlemcilerini destekleyen bir yonga için, EM_AMBIGUOUS
kullanılırsa veya _controlfp
kullanılırsa _statusfp
1 olarak ayarlanır ve eylem x87 veya SSE2 kayan nokta durum sözcüğüne başvurabileceğinden belirsizdi. _statusfp2
İşlev yalnızca x86 platformlarında desteklenir.
Ortak dil çalışma zamanı (CLR) yalnızca varsayılan kayan nokta duyarlığı desteklediğinden bu işlevler /clr (Ortak Dil Çalışma Zamanı Derlemesi) için kullanışlı değildir.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
_status87 , _statusfp , _statusfp2 |
<float.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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
Ayrıca bkz.
Matematik ve kayan nokta desteği
_clear87
, _clearfp
_control87
, _controlfp
, __control87_2